如何将 if 语句应用于大量变量而无需重写条件。例如,假设我有一组变量性别、年龄、身高……(大约 60 个变量)并且我想指定条件
如果性 = 。然后性别 = -99; 如果年龄 = . 然后年龄 = -99;. . . 数据集中存在的所有 60 个变量。有没有快速的方法来做到这一点?
谢谢
如何将 if 语句应用于大量变量而无需重写条件。例如,假设我有一组变量性别、年龄、身高……(大约 60 个变量)并且我想指定条件
如果性 = 。然后性别 = -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 计算总和或均值,您的结果将不再有意义;同样,如果您尝试使用统计程序分析数据。
除了 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;
这是此示例和其他示例的参考:如何读取 SAS 数据集中的变量名称?
此外,如果您希望它也适用于字符串变量,您可能需要考虑使用缺少的函数。
EG 如果缺少(var)然后做;
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 的一部分,所以希望你拥有它。