【发布时间】:2017-07-13 06:50:16
【问题描述】:
A 部分:
为季度数定义一个宏变量。这个想法是,这是“用户”在为新季度运行程序时唯一应该更改的内容。
B 部分:
为季度中的每个月定义宏变量,并将它们设置为等于从季度编号生成的月份值。提示:%if/%then
给定代码:
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
;
proc sql;
create table qtr1 as
select Month1.name, month1.sales as m1sales, month2.sales as m2sales,
month3.sales as m3sales, sum(month1.sales, month2.sales, month3.sales) as qtr1sales
from month1, month2, month3
where month1.name=month2.name=month3.name;
select sum(m1sales) as m1total, sum(m2sales) as m2total, sum(m3sales) as m3total,
sum(qtr1sales) as qtr1total
from qtr1;
我的解决方案:
/* question a */
%MACRO qtrn(qtr);
proc print data=&qtr ;
run;
%MEND qtrn;
/* question b */
%Macro Firstqtr(qtr);
%Let I = 1;
%If &qtr = qtr1 %then %do %until (&I > 3);
%Let var&I = Month&I;
%let I = %eval(&I + 1);
%end;
%Mend Firstqtr;
%Firstqtr(qtr);
谁能帮我找出正确的解决方案?
【问题讨论】:
-
如何将日期变量添加到数据中? (date_var=mdy(&month,'01',2017); 然后您可以按 Quarter=qtf(date_var) 对季度分组。
-
我不应该更改或修改数据
-
使用后删除变量。没人会知道吗? :)
-
你能给我一些提示吗,我无法理解,怎么做
-
你想多了。答案应该是一行代码。本月使用数据 null 步骤中的 INTNX 函数来创建宏变量,而不是使用宏和 %sysfunc()