SAS 最高版本 9.4M4 不允许开放代码 %if 语句。 %IF 的 9.4M5 文档表明对 SAS Foundation 的更新已删除限制。
提示选择的处理方式有很多种。
宏
编写一个以条件方式处理选择的宏。我建议将%include 放在%do 块内,以确保需要分号的语句是条件语句的一部分。
%macro process_selection;
%if &Prompt_1 = 1_First %then %do;
%include '/home/admin/mohaddad/sasuser.v94/1_ First.sas';
%end;
%else
%if & Prompt_1= 2_second %then %do;
%include '/home/admin/mohaddad/sasuser.v94/2_ second.sas';
%end;
%* etc …;
%mend;
%* invoke the macro;
%process_selection;
数据_空_;调用执行
数据步可以有条件地执行带有CALL EXECUTE的语句。最佳做法是将语句包装在 %NRSTR 中,以确保它会在 DATA 步骤完成后执行。
您还可以将 IF/THEN/ELSE 替换为 SELECT/WHEN 语句。
data _null_;
if "&prompt_1" = "1_First" then
call execute ( '%nrstr(%include "/home/admin/mohaddad/sasuser.v94/1_ First.sas";)' );
else
if "&x" = "hello there2" then
call execute ( '%nrstr(%/home/admin/mohaddad/sasuser.v94/2_ second.sas";)' );
run;
MACRO '关联数组'
对于提示选择值没有空格或特殊字符的情况,可以在一系列宏变量中指定潜在的目标文件。
%let FILE_1_First = /home/admin/mohaddad/sasuser.v94/1_ First.sas;
%let FILE_2_Second = /home/admin/mohaddad/sasuser.v94/2_ Second.sas;
%include "%superq(FILE_&PROMPT_1)";
提示对话框选择值
您可以更改提示对话框以返回要包含的文件名。要么是完整路径
%include "&prompt_1";
或路径的一部分(例如只是名称部分“1_First”)
%include "/home/admin/mohaddad/sasuser.v94/&PROMPT_1..sas";
%SYSFUNC(IFC
在开放代码中有条件地处理语句的一种骇人听闻的方法是使用%sysfunc(ifc(…
IFC 是一个函数,它计算表达式并为真情况返回一个字符串,为假情况返回一个不同的(或无字符串)。连续五个这样的语句不会损害任何代码或资源,其中只有一个测试为真。
%sysfunc(ifc(&Prompt_1 = 1_First
, %include '/home/admin/mohaddad/sasuser.v94/1_ First.sas';,));
%sysfunc(ifc(&Prompt_1 = 2_Second
, %include '/home/admin/mohaddad/sasuser.v94/2_ second.sas';,));