【发布时间】:2016-02-10 22:36:40
【问题描述】:
我正在使用 SAS Enterprise Guide。编写 SAS 宏函数的新手。在宏中嵌套了一个 proc sql。我试图首先检查列是否存在并返回列号,然后使用列号来获取列名,以便我可以在查询生成器中调用此宏函数。但是,我在代码的“选择猫”部分下收到错误 180-322。下面列出的是我目前写的代码:
%macro varexist(ds,var);
%local rc dsid result dynvar;
%let dsid = %sysfunc(open(&ds));
%let result = %sysfunc(varnum(&dsid,&var));
%let rc =%sysfunc(close(&dsid));
proc sql;
select cats('t1.',name) into :dynvar separated by ', '
from dictionary.columns
where libname = 'WORK' and
memname = 'TRANSPOSE_DATA' and
varnum = "&result";
quit;
&dynvar
%mend varexist;
%put %varexist(WORK.TRANSPOSE_DATA,VAR1);
【问题讨论】:
-
虽然我无法解决问题,但我设法更改逻辑并让新代码正常工作。我不回答这个问题,以防有人可以发布解决方案
-
您的程序在编码时没有多大意义。如果你让它工作发布固定程序作为答案。也许可以解释它在做什么。
-
%macro varexist(ta,ds,var); %local rc dsid 结果 col_name; %let dsid = %sysfunc(open(&ds)); %let 结果 = %sysfunc(varnum(&dsid,&var)); %let rc =%sysfunc(close(&dsid)); %if &result > 0 %then %let col_name = &ta&var; %否则 %如果 &ta = t1。 %then %let col_name = ''; &col_name %mend varexist;