SAS 宏 Do 循环问题
SAS Macro Do Loop Issues
我有一个非常简单的要求。循环遍历数据集,将每个观察值转换为一个宏变量,然后对该宏变量进行比较。这是我的代码:
%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.
部分失败的部分。我一直收到错误 "Variable N has been defined as both character and numeric." 基本上我只需要将每个观察值设置为一个宏变量一次来进行下一次比较,然后继续下一个人。所以,如果有更好的方法,请告诉我。否则,你能帮我弄清楚为什么这个比较不起作用吗?
如果您能解释更大的问题,那么您可能会得到更好的答案,不需要您将数据值转换为宏变量。将值转换为字符串然后再次尝试比较它们会引入许多错误来源。
关于如何根据数据集中的第 N 个观察设置宏变量的问题,请尝试其中之一。
如果它支持 FIRSTOBS= 和 OBS= 数据集选项。
data _null_;
set have (firstobs=&n obs=&n);
call symputx("Var1",var1);
call symputx("var2",var2);
run;
如果数据集支持直接访问,则使用它。
data _null_;
p = &n;
set have point=p;
call symputx("Var1",var1);
call symputx("var2",var2);
stop;
run;
如果不是,则使用 IF(不是宏 %if)。
data _null_;
set have ;
if _n_ = &n then do;
call symputx("Var1",var1);
call symputx("var2",var2);
stop;
end;
run;
我有一个非常简单的要求。循环遍历数据集,将每个观察值转换为一个宏变量,然后对该宏变量进行比较。这是我的代码:
%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.
部分失败的部分。我一直收到错误 "Variable N has been defined as both character and numeric." 基本上我只需要将每个观察值设置为一个宏变量一次来进行下一次比较,然后继续下一个人。所以,如果有更好的方法,请告诉我。否则,你能帮我弄清楚为什么这个比较不起作用吗?
如果您能解释更大的问题,那么您可能会得到更好的答案,不需要您将数据值转换为宏变量。将值转换为字符串然后再次尝试比较它们会引入许多错误来源。
关于如何根据数据集中的第 N 个观察设置宏变量的问题,请尝试其中之一。
如果它支持 FIRSTOBS= 和 OBS= 数据集选项。
data _null_;
set have (firstobs=&n obs=&n);
call symputx("Var1",var1);
call symputx("var2",var2);
run;
如果数据集支持直接访问,则使用它。
data _null_;
p = &n;
set have point=p;
call symputx("Var1",var1);
call symputx("var2",var2);
stop;
run;
如果不是,则使用 IF(不是宏 %if)。
data _null_;
set have ;
if _n_ = &n then do;
call symputx("Var1",var1);
call symputx("var2",var2);
stop;
end;
run;