0

我有这样的数据,

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 是否包含相同的数据,如果相同,我将给出相等,否则不相等并将它们存储在虚拟变量 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,-/- 相等。数组编程对此有帮助吗?

4

1 回答 1

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;
于 2013-05-02T14:05:36.910 回答