无法正确读取宏变量

时间:2016-11-07 00:49:41

标签: macros sas

我的目的很简单。只想为数据集提供一些值。有两个步骤。首先,将值读入宏变量。其次,将宏变量传递给数据集。代码是:

首先,创建宏变量。

proc sql;
select procdate, prim,side,orgnname,orgnid,OrgnStTe into :procdate, :prim, :side, :orgnname, :orgnid, :OrgnStTe from ours
where objid=783125;
quit;

此步骤效果很好。然后传递值。

data test;
set m1;
if id=184 then DO;
objid=783125;procdate=&procdate.;prim=&prim.;side=&side.;orgnname=&orgnname.;orgnid=&orgnid.;OrgnStTe=&OrgnStTe.;
END;
run;

对于此步骤,错误与orgnname有关。对错误不太确定。我尝试了%bquote(& orgnname。)和%str(& orgnname。)。两者都不起作用。

注意:由宏变量" ORGNNAME"生成的行。 1 CALVARY JOHN JAMES MEMORIAL HOSPITAL                ----                388                76 错误388-185:期待算术运算符。

ERROR 76-322:语法错误,语句将被忽略。

1 个答案:

答案 0 :(得分:2)

展开宏变量时,生成的代码需要是有效的SAS语法。在您想要引用字符串文字的情况下,该值必须在引号中。

ORGNNAME = "1 CALVARY JOHN JAMES MEMORIAL HOSPITAL";

为了用宏变量做到这一点,语法如下:

ORGNNAME = "&ORGNAME";

但实际上,使用宏变量来传输已经在数据集中的值是没有意义的。它需要太多工作,容易出错或价值截断。为什么不直接从数据集中读取数据呢?

data test;
  set m1;
  if id=184 then DO;
    set ours (where=(objid=783125) keep=objid procdate prim side orgnname orgnid OrgnStTe);
  end;
run;