Sas 测试变量是否存在
我想测试变量是否存在,如果不存在,则创建它。可以使用Sas 测试变量是否存在,sas,exists,Sas,Exists,我想测试变量是否存在,如果不存在,则创建它。可以使用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,
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;
(假设var4是数字的)将
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
语句。这是一个非常晚的回答/注释,但此方法对我来说非常简单(SAS 9.4)。在下面的示例中,我使用了缺失的数字和字符变量,并为缺失的字符变量is missing赋值
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;
使用
open()
函数打开数据集后,不要忘记close()
数据集。这里不需要open和varnum,是吗?你不能直接说“data try2;var4=;set try;”。在给出的示例中,它会在每次迭代中执行open和varnum,效率很低,因此它们至少应该由“if\u N_uu2;=1 then”保护。我需要测试var4是否存在,以便在执行时保留其内容。建议的数据try2;var4=。;集试
将覆盖预先存在的变量中的任何数据。由于您尝试在同一步骤中执行此操作,因此它实际上并不比其他答案更好。一旦编译器看到前面提到的var4
,它就会在数据集中创建它。运行时发生的事情没有任何影响。您不能在数据步骤中真正有条件地创建变量。也许您想编写代码来检查数据集是否有特定的变量,如果没有,则使用数据步骤来创建数据集的新版本,添加所需的列并为其提供一些合理的默认值?更好的解决方案可能是中止代码>如果输入数据不符合规格。这与AndyBeanNot的上一个答案相同,如果Muray希望得到intput数据集上不存在变量的信息!此创建变量var4
,而不是测试它是否存在。您要测试的是变量(新的或旧的)是否为空。如果它不在输入数据集中,这将创建var4
作为数字变量。是@Tom,这就是为什么如果默认数字为8,则可能需要显式attrib语句的原因。格式化变量不适合用户的需要。这很好。使用此选项,您可以指定所需的任何默认值。但是对于字符变量,在使用它之前仍然需要定义变量的长度。即使您首先在coalescc()
函数调用中使用它,SAS也会默认将其创建为数字。
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;