我有一个 SAS 列表。该 SAS 列表存储在宏变量中。请假设我没有表格来导出此 SAS 列表。
\nSAS 列表包含以逗号分隔的名称。SAS 列表宏变量的示例:
\n%LET sas_list = name1,name2,name3;\n我想检查宏变量 \xe2\x80\x9citem\xe2\x80\x9d 是否存在于列表中。
\n就像是:
\n%IF &item. IN &sas_list. %THEN %DO;\nWhatever;\n%END;\n由于某种原因,我收到错误:
\n\xe2\x80\x9cA character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was: name1 IN name1,name2,name3\xe2\x80\x9d\n感谢帮助。
\n添加minoperator和mindelimiter系统选项。它们代表宏 IN 运算符和宏 IN 分隔符。
options minoperator mindelimiter=',';
%LET sas_list = name1,name2,name3;
%LET item = name1;
%IF &item. IN &sas_list. %THEN %DO;
    %put &item is in &sas_list;
%END;
输出:
name1 is in name1,name2,name3
如果您想查找不在列表中的值,请将其传递给%eval。
options minoperator mindelimiter=',';
%LET sas_list = name1 name2 name3;
%LET item = name4;
%IF %eval(&item. IN &sas_list.) = 0 %THEN %DO;
    %put &item NOT in &sas_list;
%END;
输出:
name4 is NOT in name1,name2,name3
请注意,如果您只想有in选择地工作,也可以直接在宏中提供这些选项。例如:
%macro foo / minoperator mindelimiter=',';
    ...
%mend;
您需要在这里使用两个选项:
MINOPERATOR,这将允许使用 IN 运算符MINDELIMITER,这将允许您设置分隔符%let sas_list = name1,name2,name3;
options minoperator mindelimiter=',';
%Macro want(item);
    %if &item. in &sas_list. %then %put i = 1;
    %else %put i = 0;
%mend;
%want(name1);
i = 1
| 归档时间: | 
 | 
| 查看次数: | 913 次 | 
| 最近记录: |