data one;
input division $ sales;
cards;
A 1234
A 3654
B 5678
;
RUN;
data b;
set one;
by division;
if first.division then call symput("mfirst",sales);
if last.division then call symput("mlast",sales);
%put &mfirst &mlast;
run;

|
楼主: 内画瓶
|
1762
6
求问各位大神,为什么MFIRST的值是5678呀?? |
|
硕士生 5%
-
|
回帖推荐首先, %put &mfirst &mlast; 应该写在data步的外面,也就是run; 之后,因为宏语句的执行永远是先于SAS语句;
call symput是在SAS语句执行的时候给宏变量赋值, 所以,如果放在一起,首先执行%put语句,此时宏变量还没有被赋值。
data步执行过程:
第一条,first.division=1, last.division=0, &mfirst=1234;
第二条,first.division=0, last.division=1, &mfirst=1234, &mlast=3654;
第三条,first.division=1, last.divis ...
| ||
|
|
| ||
| ||
加好友,备注cda京ICP备16021002号-2 京B2-20170662号
京公网安备 11010802022788号
论坛法律顾问:王进律师
知识产权保护声明
免责及隐私声明


