如何將if語句應用於大量變量而不必重寫條件。例如,假設我有一組變量性別,年齡,身高...(約60個變量),並且我想指定條件SAS中變量的遞歸命令
if sex =。那麼性別= -99;如果年齡=,則爲 。那麼年齡= -99; 。 。 。 數據集中存在的所有60個變量。有沒有快速的方法來做到這一點?
謝謝
如何將if語句應用於大量變量而不必重寫條件。例如,假設我有一組變量性別,年齡,身高...(約60個變量),並且我想指定條件SAS中變量的遞歸命令
if sex =。那麼性別= -99;如果年齡=,則爲 。那麼年齡= -99; 。 。 。 數據集中存在的所有60個變量。有沒有快速的方法來做到這一點?
謝謝
使用數組。
array arr{60} sex age height .... ;
do i = 1 to 60;
if arr{i} = . then arr{i} = -99;
end;
這就是說,要考慮重新編碼這樣的缺失值是否真的是你想要做的。大多數SAS程序知道缺失值並能以合理的方式處理它們;把它們變成一個數字值可以讓你咬在後面。例如,如果您嘗試使用PROC SUMMARY計算總和或平均值,則結果將不再有意義;同樣如果您嘗試使用統計過程來分析數據。
'array arr _numeric_;如果你想完成所有這些(看起來像海報)似乎是正確的。 – Joe
除了由Hongi大井答案,如果你想要爲所有在數據集中的變量做到這一點(這聽起來像你這樣做),不想給他們打出來,就可以得到SAS提供你將變量列表提供給你的數組。
例子:
%macro getvars(dsn);
%global vlist;
proc sql;
select name into :vlist separated by ' '
from dictionary.columns
where memname=upcase("&dsn");
quit;
%mend;
下面是這個和其它實例的引用:How to read variable names in a SAS data set?
此外,你可能想,如果你想這對於字符串變量工作太考慮使用缺少的功能。
E.G.如果缺少(var),那麼做;
這是一個好主意,在你的回答中包含鏈接代碼的相關部分。儘管包含了詳細的鏈接和/或超出了答案的範圍,但SO中的答案通常應該是自我完整的,而不需要引用其他網站。 (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers瞭解更多信息。) – Joe
data have;
input x y z a b;
datalines;
1 2 3 . 5
4 5 . 1 2
4 3 . . 1
;;;;
run;
proc stdize data=have out=want reponly missing=-99;
run;
如果你真的想要做的所有的人(或列出那些你想做的事)。 STDIZE是SAS/STAT的一部分,所以希望你有這個。
使用一個數組和一個'for'循環。 – Blazemonger
SAS沒有'for',它是一個'do'循環;) – Joe
另外,我很失望打開這個線程並且沒有找到一個寫實際遞歸宏或FCMP例程的理由...... – Joe