【发布时间】:2019-04-13 22:51:15
【问题描述】:
HAVE 是一个宽数据集,其名称存储在变量name1-name250 中。以下是前两个 obs 和几个 var:
episode name1 name2 name3 name4 name5 ...
121 DETWEILER.TJ.M BLUMBERG.MIKEY GRISWOLD.GUS.N
451 BOB.KING KID.HUSTLER FINSTER.MS PRICKLEY.PETEY GRISWOLD.GUS
...
有些名称需要更正。更正存储在数据集FIXES:
goodname badname
DETWEILER.TJ DETWEILER.TJ.M
GRISWOLD.GUS GRISWOLD.GUS.N
我只需要从出现在HAVE 中的FIXES 中找到badname 并将它们替换为goodname。我目前在FIXES 中每一行的数据步骤中循环通过name1-name250 来完成此操作:
data WANT;
set HAVE;
array name {*} name1-name250;
do i=1 to dim(name);
if name{i} = "DETWEILER.TJ.M" then name{i} = "DETWEILER.TJ";
else if name{i} = "GRISWOLD.GUS.N" then name{i} = "GRISWOLD.GUS";
/*manually add other corrections from FIXES dataset*/
else name{i} = name{i};
end;
run;
这感觉效率很低。有什么更好的方法?
【问题讨论】:
-
为什么不将您的数据集转换为每个剧集/名称有一条记录,然后您可以合并(连接)这两个表,而无需遍历一组变量。