我正在尋找一種方法來創建包含數據集的某些值的字符串變量,同時通過數據步驟。SAS變量級聯通過數據步驟
實施例的數據集work.test:
AddToStringYN Value
Y One
Y Two
N Three
Y Four
N Five
所以在結束時,變量將如下所示:OneTwoFour(或甚至更好FourTwoOne)。 這看起來很簡單,但我似乎無法找到辦法。 我也試圖與宏觀變量工作是這樣的:
%let stringvar=;
Data _null_;
set work.test;
if AddToStringYN = "Y" then do;
call symput('stringvar',"&stringvar" || strip(value));
end;
Run;
但是這給:
GLOBAL STRINGVAR Four
所以我只得到了最後一個值。我明白這一定是因爲我對這個宏觀設施的誤解,但我不明白爲什麼只有變量的最後一個值。 我以爲只是最後一次symput被稱爲是實際執行或東西,但後來當我的代碼調整爲:
%let stringvar=;
Data _null_;
set work.test;
if AddToStringYN = "Y" then do;
call symput('stringvar'||strip(value),"&stringvar" || strip(value));
end;
Run;
那我讓他們都:
GLOBAL STRINGVARONE One
GLOBAL STRINGVARTWO Two
GLOBAL STRINGVARFOUR Four
所以我最後的猜測是,通過數據步驟,'調用symput ...'行實際上被添加到宏處理器,其中「& stringvar」已被替換,並且僅在最終語句被全部執行之後。
這是一個很好的假設還是存在另一種解釋? 回到原來的問題:是否有一個簡單的方法來實現這一點(具有所需的變量)?
完善!我記得嘗試使用這樣的結構(保留和可變重用的組合),但它不起作用。現在還找不到什麼不同,但它工作!確實很簡單......如果你知道在哪裏看;) 謝謝! (關於附加問題的任何想法,如果我的邏輯是正確的宏變量?) – Yoh 2011-04-29 11:07:10
另外,嘗試用cat(),catt(),cats(),catx()函數替換trim(left() 。它們非常靈活,更易於使用,併爲您自動進行類型轉換!可用SAS9以上... – 2011-04-29 19:40:29
@Rob將調查,使用剝離()現在... – Yoh 2011-05-02 12:43:48