2013-05-01 80 views
0

我有这样的数据,搜索和匹配单个数据集的观察与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包含相同的数据或没有,如果同样的我会给等于否则不等于和存储它们在虚拟变量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,

我期待的数据是相等的。数组编程对此有帮助吗?

+2

你有没有想过转换这张表,以便M1-M5是你的行,P1和P2是你的变量?这将允许你做一个变量'match',并说:'如果P1 = P2那么匹配='EQ'; else match ='NE';' – bdiamante 2013-05-01 20:52:02

回答

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; 
+0

Joe非常感谢您在解决我的问题上的帮助您的建议非常好,非常感谢您的帮助 – user2134713 2013-05-09 08:27:10