【发布时间】:2011-08-05 03:41:45
【问题描述】:
我想测试一个变量是否存在,如果不存在,就创建它。
【问题讨论】:
-
您不能真正有条件地在 DATA 步中创建变量。也许您想编写代码来检查数据集是否具有特定变量,如果没有,则使用 DATA 步骤创建数据集的新版本,添加所需的列并为其提供一些合理的默认值?
-
如果输入数据不符合规范,更好的解决方案可能是
abort;。
我想测试一个变量是否存在,如果不存在,就创建它。
【问题讨论】:
abort;。
可以使用open()&varnum() 函数。 varnum() 的非零输出表明变量存在。
data try;
input var1 var2 var3;
datalines;
7 2 2
5 5 3
7 2 7
;
data try2;
set try;
if _n_ = 1 then do;
dsid=open('try');
if varnum(dsid,'var4') = 0 then var4 = .;
rc=close(dsid);
end;
drop rc dsid;
run;
【讨论】:
open()函数打开你的数据集后别忘了close()。
data try2; var4=.; set try; 将覆盖预先存在的变量中的任何数据。
var4,它就会在数据集中创建它。运行时发生的事情没有影响。
data try2;
set try;
var4 = coalesce(var4,.);
run;
(假设 var4 是数字)
【讨论】:
coalescec() 函数调用中使用它,SAS 也会默认将其创建为数字。
将var4 分配给它自己。如果变量不存在,则赋值将创建该变量,如果存在则保留内容。
data try;
input var1 var2 var3;
datalines;
7 2 2
5 5 3
7 2 7
;
data try2;
set try;
var4 = var4;
run;
请记住,当 var4 不存在时以这种方式创建它会使用默认变量属性,因此如果您需要特定的格式/长度等,您可能需要使用显式的 attrib 语句。
【讨论】:
var4 不在输入数据集中,这将创建一个数字变量。
这是一个非常晚的答案/评论,但这种方法对我有用并且非常简单(SAS 9.4)。在下面的示例中,我使用了缺失的数字和字符变量,并为缺失的字符变量分配了一个值。
data try;
input var1 var2 var3;
datalines;
7 2 2
5 5 3
7 2 7
;
data try2;
length var4 $20;
length var5 8;
set try;
var4 = var4;
if var4 = ' ' then var4 = 'Not on Source File';
run;
【讨论】:
creates 变量var4 而不是测试它是否存在。您正在测试的是变量(新的或旧的)是否为空。