我有一个关于if / then结构和(over)写文件的基本问题。
My& name var设置为name_b,但aa.js始终被覆盖并且bb.js。
data _null_;
if "&name" = "name_a" then do;
filename cd_file '\\path\aa.js';
end;
else if "&name" = "name_b" then do;
filename cd_file '\\path\bb.js';
end;
run;
我做错了什么?
答案 0 :(得分:3)
filename
是一个全局声明,不应包含在datastep中。
您可以使用宏逻辑 - 例如:
%macro example();
%let name=name_a; /* as appropriate */
%if &name = name_a %then %do;
filename cd_file '\\path\aa.js';
%end;
%else %if &name = name_b %then %do;
filename cd_file '\\path\bb.js';
%end;
%mend;
答案 1 :(得分:0)
FILENAME语句不可执行,因此它们将在编译数据步骤时发生。因此,当您的IF语句运行时,两个FILENAME语句都已执行。
您可以使用FILENAME()函数。
运行此示例以查看使用FILENAME()函数使赋值成为条件。
%let name=name_a;
%let path=%sysfunc(pathname(work));
data _null_;
if "&name" = "name_a" then do;
filename cd_file "&path/aa.js";
end;
else if "&name" = "name_b" then do;
filename cd_file "&path/bb.js";
end;
run;
%put CD_FILE -> %scan(%sysfunc(pathname(cd_file)),-1,\/);
data _null_;
if "&name" = "name_a" then do;
rc=filename('cd_file',"&path/aa.js");
end;
else if "&name" = "name_b" then do;
rc=filename('cd_file',"&path/bb.js");
end;
run;
%put CD_FILE -> %scan(%sysfunc(pathname(cd_file)),-1,\/);