我有这样的数据,
external-id M1 M2 M3 M4 M5 VAR1 VAR2 VAR3 VAR4 VAR5
P1 AA AG ZZ -/- GG
P2 AA AA AA GG GG
我想看到P1和P2都包含相同的数据,如果相同,我将给予相等的其他不相等的值并将它们存储在dummyvariables VAR1到VAR5中。我如何在SAS中执行此操作?
我期待这样的数据
external-id M1 M2 M3 M4 M5 VAR1 VAR2 VAR3 VAR4 VAR5
P1 AA AG ZZ -/- GG EQ NE EQ EQ EQ
P2 AA AA AA GG GG
我想考虑P1或P2是否有ZZ, - / - 是相等的。数组编程对此有用吗?
答案 0 :(得分:1)
这可能不是一个好主意,因为听起来您的数据结构需要重新考虑。特别是,结束数据结构似乎并不十分有用;但也许你会给出一小部分例子来理解你的真实目的。
那就是说,这是你如何做这个具体的例子。如果您有其他注意事项,这可能会也可能不会。
我在IFC()分支中使用LAG;如果您使用IF,则不能以这种方式使用LAG,因为它无法按预期工作 - 您需要将LAG转换为一组新的临时变量,或者您需要使用RETAIN。
data have;
input (externalid M1 M2 M3 M4 M5) ($);
datalines;
P1 AA AG ZZ -/- GG
P2 AA AA AA GG GG
;;;;
run;
data want;
set have;
array ms m1-m5;
array vars $ var1-var5;
do _t = 1 to dim(ms);
vars[_t] = ifc(ms[_t]=lag(ms[_t]) or ms[_t] in ('ZZ','-/-') or lag(ms[_t]) in ('ZZ','-/-'),'EQ','NE');
end;
if _N_ = 1 then call missing(of vars[*]);
drop _t;
run;