但是我现在只想要知道一个data set里面的某个变量是否存在应该用什么程序呢?
比如说data set是sasuser.a,我想要知道a里面的变量b是否存在。这个程序要能放在宏里使用。
我查了一下可以跟%sysfunc的普通程序,好像没有找到,cexist,filexist这样的都不行。拜求!
谢谢各位了!

|
楼主: elliott828
|
18652
9
[原创博文] 如何判断一个变量是否存在 |
|
本科生 20%
-
|
回帖推荐yuerqieqie 发表于9楼 查看完整内容 试一试下面的程序
data test1;
a = 1;
run;
data test2;
set test1;
a = 2;
where a = 1;
run;
你会发现test2有1行数据,且a=2。说明在读入test1的时候先判断a是否等于1,等于1就读入,然后执行赋值语句a = 2。
同理执行
data test3;
set test1;
a = 2;
where a = 2;
run;
你会发现test3没有数据输出,因为在读入test1的时候没有一条数据满足a = 2。
See below.
%macro checkvar(dsn=, var=);
options nonotes;
***Note: 0---not found :: 1---found;
proc contents data=&dsn out=_name_(keep=name) noprint; run;
%local rc;
%let rc=0;
data _null_;
set _name_;
call symputx('rc','1');
where upcase(name)="%upcase(&var)";
run;
%put rc=&rc ;
%mend;
%checkvar(dsn=sashelp.class, var=a ...
data a;
b = 1; c = 2; output;
run;
%macro existsVariable(lib =, ds =, var =);
%local dsid check rc;
%let dsid = %sysfunc(open(&lib..&ds.));
%let check = %sysfunc(varnum(&dsid., &var.));
%let rc = %sysfunc(close(&dsid.));
%if &check. = 0 %then %do;
0
%end; %else %do;
1
%end;
%mend existsVariable;
%put %existsVariable(lib = work, ds = a, var = b);
1# el ...
| ||
|
|
| ||
|
山高人为峰
|
||
| ||
| ||||||||||||
| |||||||||||||||||||||||
| ||
加好友,备注cda京ICP备16021002号-2 京B2-20170662号
京公网安备 11010802022788号
论坛法律顾问:王进律师
知识产权保护声明
免责及隐私声明


