2014-02-18 36 views
2

我在寫SAS作業。對於此SAS作業,我需要執行以下操作 -基於數據檢索列步變量

  1. 檢索字段「ActiveColumn」的值。該值將是表中另一列的名稱。
  2. 將ActiveValue設置爲等於由ActiveColumn命名的字段的值。

基本上,我想在這裏我就不半事先寫出每列名寫一個版本的這 -

Select(ActiveColumn); 
    when ('CITY') ActiveValue = City; 
    when ('STATE') ActiveValue = State; 
    when ('ZIP') ActiveValue = Zip; 
otherwise; 

什麼是最簡單的方法是什麼?

非常感謝!

回答

3

這聽起來像是一個垂直轉置。如果所有字段都是字符,就會這樣做:

data want; 
set have; 
array fields city state zip; 
do _t = 1 to dim(fields); 
    if lowcase(activeColumn)=vname(fields[_t]) then activeValue=fields[_t]; 
    *may want an OUTPUT here.; 
end; 
run; 

如果它們是混合類型,則需要兩個數組和循環。無論如何,如果您打算只循環遍歷所有字段,您可能不需要ActiveColumn;您可以在循環中將ActiveColumn設置爲vname(字段[_t])。

如果您打算讓這變得更加靈活,您可以使用array fields _character_; 這將使用所有字符變量(因此意味着您不必明確指定它們)。