-2
對於任務,我被要求在Proc Sql語句中創建一個do循環。我的程序沒有識別m1sales和m2sales。這裏是我必須創建的數據集和宏。第一個宏是設置允許人們將qtr設置爲一個數字。第二個宏設置月份一,二和三取決於月份。第一個proc sql正在做我想做的事。第二個不是當我添加do語句時。我被給了附加語句:「%do循環不是'在'create table命令中'%do循環被create table命令後面的一系列文本替換;該文本可能是'在'創建表語句'。任何人都可以告訴我如何創建這個循環正確嗎?SAS中的Proc Sql Do循環
data Month1;
input Name $ sales;
cards;
Joyce 235
Marsha 352
Bill 491
Vernon 210
Sally 418
;
data Month2;
input Name $ sales;
cards;
Joyce 169
Marsha 281
Bill 315
Vernon 397
Sally 305
;
data Month3;
input Name $ sales;
cards;
Joyce 471
Marsha 314
Bill 394
Vernon 291
Sally 337
;
data Month4;
input Name $ sales;
cards;
Joyce 338
Marsha 259
Bill 310
Vernon 432
Sally 362
;
data Month5;
input Name $ sales;
cards;
Joyce 209
Marsha 355
Bill 302
Vernon 416
Sally 475
;
data Month6;
input Name $ sales;
cards;
Joyce 306
Marsha 472
Bill 351
Vernon 405
Sally 358
;
options symbolgen;
%Macro quarter(quarter);
%Global qtr;
%Let qtr = &quarter;
%Mend quarter;
%quarter (1);
options mprint symbolgen;
%Macro Month(day);
%Global One;
%Global Two;
%Global Three;
%if &qtr = %eval(1) %then %do;
%Let One = 1;
%Let Two = 2;
%Let Three = 3;
%end;
%Else %if &qtr = %eval(2) %then %do;
%Let One = 4;
%Let Two = 5;
%Let Three = 6;
%end;
%Else %if &qtr = %eval(3) %then %do;
%Let One = 7;
%Let Two = 8;
%Let Three = 9;
%end;
%Else %if &qtr = %eval(4) %then %do;
%Let One = 10;
%Let Two = 11;
%Let Three = 12;
%end;
%Mend Month;
%Month(&qtr);
正確的代碼:不與do循環工作
%Macro qtrearn(x);
proc sql;
create table qtr&x as
select Month&One..name, month&One..sales as m&One.sales, month&Two..sales as m&Two.sales,
month&Three..sales as m&Three.sales, sum(month&One..sales, month&Two..sales, month&Three..sales) as qtr&x.sales
from month&One, month&Two, month&Three
where month&One..name=month&Two..name=month&Three..name;
select sum(m&One.sales) as m&One.total, sum(m&Two.sales) as m&Two.total, sum(m&Three.sales) as m&Three.total,
sum(qtr&x.sales) as qtr&x.total
from qtr&x;
%Mend qtrearn;
%qtrearn(&qtr);
代碼。我需要爲作業插入do循環。
options mprint symbolgen;
%Macro qtrearn(x);
proc sql;
%do i = &One %to &Three;
create table qtr&x as
select Month&i..name, month&&i..sales as m&&i.sales,
sum(month&One..sales, month&Two..sales, Month&Three..sales) as qtr&x.sales
from month&One, month&Two, month&Three
where month&One..name=month&Two..name=month&Three..name;
%end;
select sum(m&One.sales) as m&One.total, sum(m&Two.sales) as m&Two.total, sum(m&Three.sales) as m&Three.total,
sum(qtr&x.sales) as qtr&x.total
from qtr&x;
%Mend qtrearn;
%qtrearn(&qtr);