【问题标题】:Getting error while running SAS code运行 SAS 代码时出错
【发布时间】:2016-02-29 18:29:42
【问题描述】:

运行以下代码时出现错误。 &CNT50 并且 &vars 中包含列名。

每一列都是从1100 的一些值。我想选择每一列并检查以下条件(%if 语句),创建一个新变量并为其分配值(如freepartially freenot free)。

option mlogic mprint;
%macro analysis();
DATA Q2;
SET Q1;
%do i=1 %to &CNT.;
%let segs =%scan(&VARS.,&i.," ");
%IF &SEGS.<=2.5 %THEN &SEGS._R="FREE";
%ELSE %IF (&SEGS.>2.5 AND &SEGS.<5.5) %THEN &SEGS._R="PARTLY FREE";
%ELSE %IF &SEGS.>=5.5 %THEN &SEGS._R="NOT FREE";
/*%PUT &segs.;*/
%end;
RUN;
%MEND;
%analysis();

这是我得到的输出:

SAS LOG ERROR:

MPRINT(ANALYSIS):   DATA Q2;
MPRINT(ANALYSIS):   SET Q1;
MLOGIC(ANALYSIS):  %DO loop beginning; index variable I; start value is 1;     stop value is 56; by value
  is 1.
MLOGIC(ANALYSIS):  %LET (variable name is SEGS)
MLOGIC(ANALYSIS):  %IF condition &SEGS.<=2.5 is FALSE
MLOGIC(ANALYSIS):  %IF condition (&SEGS.>2.5 AND &SEGS.<5.5) is FALSE
MLOGIC(ANALYSIS):  %IF condition &SEGS.>=5.5 is TRUE
MLOGIC(ANALYSIS):  %PUT &segs.
yr1960
MLOGIC(ANALYSIS):  %DO loop index variable I is now 2; loop will iterate again.
MLOGIC(ANALYSIS):  %LET (variable name is SEGS)
MLOGIC(ANALYSIS):  %IF condition &SEGS.<=2.5 is FALSE
MLOGIC(ANALYSIS):  %IF condition (&SEGS.>2.5 AND &SEGS.<5.5) is FALSE
MLOGIC(ANALYSIS):  %IF condition &SEGS.>=5.5 is TRUE
***NOTE: Line generated by the macro variable "SEGS".
1      yr1961_R
   --------
   22

【问题讨论】:

  • 为什么在数据步骤中使用宏逻辑?如果不使用 %sysevalf,则无法将宏变量与浮点数进行比较。无论如何,我认为您不需要宏循环,尝试在没有宏逻辑的情况下重写,看看是否适合您?

标签: sas datastep


【解决方案1】:

您将宏处理器内部的 IF 条件与数据步骤内部的 IF 条件混淆了。我想这就是你想要的。

%macro analysis();
DATA Q2;
SET Q1;
%do i=1 %to &CNT.;
%let segs =%scan(&VARS.,&i.," ");
IF &SEGS.<=2.5 THEN &SEGS._R="FREE";
ELSE IF (&SEGS.>2.5 AND &SEGS.<5.5) THEN &SEGS._R="PARTLY FREE";
ELSE IF &SEGS.>=5.5 THEN &SEGS._R="NOT FREE";
/*%PUT &segs.;*/
%end;
RUN;
%MEND;
%analysis();

宏为您编写代码。您将变量 N​​ame 与常量值进行比较(使用字符串排序,不少于),而不是变量值与使用数字的常量值。

【讨论】:

    猜你喜欢
    • 2014-04-26
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-16
    • 2016-05-02
    相关资源
    最近更新 更多