2017-05-04 60 views
0

我想從現有的最高n變量中分配一個新變量。 因此,如果我們有一個已經越來越列數表 -SAS:來自數據集的最高變量的輸出

data have; 
input uid $ var1 $ var2 $ var3 $; 
datalines;      
1111 1 0 1 
2222 1 0 0 
3333 0 0 0 
4444 1 1 1 
5555 0 0 0 
6666 1 1 1 
; 

我想得出的變量VAR3爲final_code。

data want; 
set have; 
final_code = max(of var1-var3); 
run; 

上面沒有意義,因爲我只想保留var3列。同樣,如果var4在那裏,我希望只有var4。

有人想幫我嗎?

+0

你想要的只是'var3'中的值嗎? – Joe

+0

是的。如果有var4,我想要var4等等。 – ammosperros

+0

您的數據集不能有變化的變量數量,所以我懷疑這些解決方案不適用於您的完整數據集。你能準確地展示你想要的和更復雜的相同數據嗎? – Reeza

回答

3

如果我理解你的話,你不想要max的值,而是來自最高編號變量的值。

很多方法可以做到這一點,哪種方式取決於變量的命名方式。這是最簡單的,如果他們實際上按照你的說法命名。

data want; 
    set have; 
    array var[*] var:; 
    final_code = var[dim(var)]; 
run; 

這裏我們做一個陣列出來的var:,然後選擇使用陣列中dim(說的數組的大小)的最後一個元素。

0

我認爲這是你正在尋找的是:

%let n=3 
data want; 
set have; 
var&n = max(of var1-var&n); 
drop var1-var%eval(&n-1); 
run; 

宏變量&n保存n的值。這在代碼的編譯階段用作替代。

DROP語句告訴數據步驟放棄這些變量。

%eval()宏函數對宏值執行整數運算。所以我們通過N-1下降1。

+0

如果n = 12,我仍然希望#var3的值? @DomPazz,感謝您的幫助。 – ammosperros

+0

我不確定我完全理解你在問什麼。你能詳細解釋一下嗎? – DomPazz

+0

基於以上評論@joe答案是你在找什麼。 – DomPazz