【发布时间】:2021-07-28 21:14:41
【问题描述】:
我的意图是使用调用执行在基于“框架”数据集的两步过程中构建数据集。我需要'a_dataset'。它不存在。 我读了“框架”数据集的行: 在第一行,因为'a_dataset'不存在我做宏nexds。 'frame' 的第二行,我检查 'a_dataset' 是否存在,我找到它并进行宏扩展。
很遗憾,我的代码无法正常工作。对于 'frame' 中的每一行,存在条件始终为 false,它运行 nexds 宏的两倍。
DATA WORK.frame;
INFILE DATALINES4
/*DLM='7F'x*/
DLM=' '
MISSOVER
DSD ;
INPUT
from : $CHAR25.
tojoin : $CHAR7. ;
DATALINES4;
dataset join1
dataset join2
;;;;
proc delete data=a_dataset;run;
%macro exds(dsn,varname);
data &dsn.;
set &dsn.;
&varname. = 'exist';
run;
%mend;
%macro nexds(dsn,varname);
data &dsn.;
&varname. = 'notexist';
run;
%mend;
data _null_;
set frame;
name = strip(tojoin);
dsname = cat('a_',strip(from));
if ~exist(dsname) then put 'notexist';
else put 'exist';
if ~exist(dsname) then call execute('%nexds('||dsname||','||name||')');
else call execute('%exds('||dsname||','||name||')');
run;
它运行这两行代码:
1 + data a_dataset; join1 = 'notexist'; run;
2 + data a_dataset; join2 = 'notexist'; run;
我想要:
1 + data a_dataset; join1 = 'notexist'; run;
2 + data a_dataset; set a_dataset; join2 = 'exist'; run;
在 put 调用的日志中:
notexist
notexist
似乎在“帧”的每一行的开头检查了 if 条件,而不是在每行读取“帧”的单行之后。
【问题讨论】:
-
您可以尝试将 CALL EXECUTE() 切换为 DOSUBL() ,这会影响事情的运行时间。
标签: sas