【发布时间】:2019-08-08 16:44:35
【问题描述】:
我有一个非常简单的要求。循环遍历数据集,将每个观察值转换为宏变量,然后对该宏变量进行比较。这是我的代码的样子:
%do n = 1 %to &i2.;
data want;
set have;
%if _N_ = &n. %then %do;
call symputx("Var1",var1);
call symputx("var2",var2);
%end;
run;
data want;
retain FinalCount
set have;
where Variable1="&var1.";
by SomeVariable
if first.SomeVariable then FinalCount=0;
if final="FINAL" then FinalCount+1;
if Finalcount=&var2. then Final_Samples=1;
finalCount=FinalCount;
run;
%end
_N_ = &n. 部分中失败的部分。我不断收到错误消息“变量 N 已被定义为字符和数字。”基本上我只需要将每个观察值设置为一个宏变量一次即可进行下一次比较,然后继续进行下一个比较。所以,如果有更好的方法,请告诉我。否则,您能帮我弄清楚为什么这种比较不起作用吗?
【问题讨论】:
-
宏变量N的值是1、23等数字串,永远不会等于字母串_N_。也许您想要一个实际的 IF 语句而不是那里的宏语句?
-
我觉得应该是
if _N_ = &n then do;吧?