用sas搜索和匹配单个数据集中的观测值

用sas搜索和匹配单个数据集中的观测值,sas,Sas,我有这样的数据 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是否包含相同的数据,如果相同,我将给出equal,否则不相等,并将它们存储在dummyvariables VAR1到VAR5中。如何在SAS中执行此操作 我期待这样的数据 external-id M1 M2 M3 M4 M5 VAR1 VAR2

我有这样的数据

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

这可能不是一个好主意,因为听起来您的数据结构需要重新考虑。特别是,结尾的数据结构似乎不是很有用;但也许你给出的例子太少,无法理解你的真正目的

也就是说,下面是你如何做这个具体的例子。如果您有其他考虑,这可能会也可能不会起作用

我在IFC()分支中使用LAG;如果改为使用if,则不能以这种方式使用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;

您是否考虑过转换这个表,以便M1-M5是您的行,P1和P2是您的变量?这将允许您使变量
匹配
,并说:
如果P1=P2,则匹配class='EQ';否则匹配class='NE'