【问题标题】:Trying to create a macro with If-Then conditions in SAS尝试在 SAS 中创建具有 If-Then 条件的宏
【发布时间】:2013-02-11 20:06:15
【问题描述】:

这是我用来创建格式的代码.....

    libname myfmt "&FBRMrootPath./Formats";
%macro Create_Macro(DSN,Label,Start,fmtname,type);
options mprint mlogic symbolgen;
%If &type='n' %then %do;
  proc sort data=&DSN out=Out; by &Label;run;
  Data ctrl;
     set Out(rename=(&Label=label &Start=start )) end=last;
     retain fmtname &fmtname type &type;

  %If last %then %do;
      hlo='O';
      label='*ERROR';
      output;
  %End;
%End;

%Else  %do;
     proc sort data=&DSN out=Out; by &Start;run;
    Data ctrl;
     set Out(rename=(&Start=label &Label=start )) end=last;
     retain fmtname &fmtname type &type;
     output;
    %If last %then %do;
      hlo='O';
      label='*ERROR';
      output;
      %End;
%End;

proc format library=myfmt cntlin=ctrl;

%Mend Create_Macro;

%Create_Macro(SSIN.prd,prd_nm,prd_id,'prd_test','n');
/*%Create_Macro(SSIN.prd,prd_id,prd_nm,'prd_testc','c');*/

我收到以下错误...代码看起来不错,但我不知道为什么会出现错误... 有什么帮助???

【问题讨论】:

  • 这是我遇到的错误...错误:在需要数字操作数的 %EVAL 函数或 %IF 条件中找到字符操作数。条件是:最后一个错误:宏 CREATE_MACRO 将停止执行。%LET _SASPROGRAMFILE=; 58 59 ;*';*";*/;quit;run; ____ 180 错误 180-322: 语句无效或使用顺序不正确。
  • 编辑您的问题以添加错误消息;不要使用评论。

标签: sas sas-macro


【解决方案1】:

不完全确定您在做什么,但错误消息可能是因为您将macro 代码与data step 代码混合在一起。尝试改变这个:

if last then do;
   hlo='O';
   label='*ERROR';
   output;
end;

换句话说,去掉与号(表示宏变量引用)。 此外,请务必在每个数据步骤的末尾和 PROC FORMAT 调用之后添加 run; 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多