【问题标题】:Trouble with SAS do loopSAS do loop 的问题
【发布时间】:2013-11-16 17:56:10
【问题描述】:

这是我的代码:

libname Project 'XXX'; run;
%let dname = q1males;
%let Gender = 'Male';
%let samp = q1msamp;
%let stats = Malestats;


data project.data1; set project.data;
id = _n_;
run;



data project.&dname; set project.data1; 
if Gender = &Gender;
run;
%macro question;
%do i = 1 %to 5;

proc surveyselect data = project.&dname method = SRS sampsize = 27 
                out = project.&samp;
                id _all_;
run;

proc print data = project.&samp;
run;

proc sql;
create table project.&stats&i as
select 'Weight',
avg(Weight) as Mean format 10.2 label 'Mean Weight',
std(Weight) as Std format 10.2 label 'Std. Dev Weight'
from project.&samp;
QUIT;
%end;
%mend question;
%question;

%do j = 1 %to 5;
data project.merged&j;
merge project.femalestats&j project.malestats&j;
by _Tema003 Mean Std;
run;

除了最后 6 行,一切都正常,从 %do j = 1 %to 5 开始。 我为女性和男性数据集运行了它之前的代码两次,最后 6 行我试图合并女性和男性数据集(例如:project.Femalestats1 与 project.Malestats1 合并到一个新数据集 project.merged1 .) 我的日志没有显示错误,但我也没有得到合并的数据集。我尝试了 proc sql,但结果令人失望。

有什么帮助吗?谢谢!

【问题讨论】:

    标签: sql loops sas proc do-loops


    【解决方案1】:

    您不能在宏之外使用宏循环。像使用 question 宏一样将最后几行包含在宏中。

    另外,你需要结束循环:

    %macro myloop();
       %do i=1 %to 5;
    
          <stuff>
    
       %end
    %mend;
    
    %myloop;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      • 2022-01-12
      • 1970-01-01
      • 2020-05-16
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      相关资源
      最近更新 更多