2015-04-17 52 views
0

我有一個問題來創建一個新的變量。我有幾個變量命名爲A,B,C,D,E,F,G。所有變量都是0/1二進制變量。所以我想創建一個新的變量,它顯示任何3個或更多的變量等於1如何選擇SAS中的任何2個或多個變量

例如,

new_variable =0; 
if ANY 3 or more variables(A,B,C,D,E,F,G) =1 then new_variable =1; 

回答

6

沒有辦法 排序的方式做語法喜歡你有,但因爲你很聰明,有0/1的二進制文件,所以如果你想一秒鐘,看看3個或更多是否是1,那麼有一個非常簡單的方法。

if sum(of a b c d e f g) >= 3 then new_Variable=1; 

其實簡單一點:

new_Variable = (sum(of a b c d e f g) GE 3); 

爲真= 1個時,假的你評估一個布爾表達式= 0。

如果你的數據是一個數組或一個共同的前綴,有一種方法可以做到這一點更容易:

new_variable = (sum(of arrayname[*]) GE 3); 

new_variable = (sum(of varprefix:) GE 3); 

其中arrayname是你的陣列或varprefix是共同的前綴你的變量(和只有你的變量)共享。


編輯:有一種方法可以用類似的語法來做到這一點。使用countc

data have; 
call streaminit(7); 
array vars[7] a b c d e f g; 
do _n_ = 1 to 20; 
    do _i = 1 to dim(vars); 
    vars[_i] = rand('Binomial',.2,1); 
    end; 
    output; 
    end; 
run; 

data want; 
    set have; 
    if countc(cats(of a--g),'1') ge 3; 
run; 

如果你有其他的東西比1/0,你可以使用catx用空格或東西分隔它們,然後countw尋找完整的價值;在這裏,11將看起來像兩個1 s不是十一,如果這是可能的數據。

順便提一下,還有很多其他解決方案;也許有些人會來提及他們。例如,CALL SORTN然後查找1的第一個實例。

相關問題