2013-05-01 76 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