如何在不重写条件的情况下将if语句应用于大量变量。例如,假设我有一组变量sex,age,height ...(约60个变量),我想指定条件
如果性别=。然后性别= -99; 如果年龄=。然后年龄= -99; 。 。 。 数据集中存在的所有60个变量。有快速的方法吗?
谢谢
答案 0 :(得分:2)
使用数组。
array arr{60} sex age height .... ;
do i = 1 to 60;
if arr{i} = . then arr{i} = -99;
end;
那就是说,要考虑重新编码这样的缺失值是否真的是你想要做的。大多数SAS程序都知道缺失值并能以合理的方式处理它们;将它们变成数值可能会让你陷入困境。例如,如果您尝试使用PROC SUMMARY计算总和或平均值,则结果将不再有意义;同样,如果您尝试使用统计程序分析数据。
答案 1 :(得分:1)
除了Hongi Ooi的答案之外,如果你想对数据集中的所有变量(听起来像你这样做)做这个并且不想输出它们,你可以让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)则执行;
答案 2 :(得分:0)
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的一部分,所以希望你能拥有它。