全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5259 5
2013-01-02
请教:初学sas,通过看教材了解到sas中定义的宏变量可以是一个dataset;也可以是命令或文本,那么可以将数据集中的某个变量的值定义成宏变量吗?
我写了如下程序:
%let price=a.unit_price; (这里,unit_price是a中的一个变量)
%let number=a.tran_capacity; (同上)
data a;
totalpay=&price*&number;
set a;
run;

最后提示这段程序是错误的?
请问错误的原因是sas中的宏变量不可以是变量名还是我本身程序写错了?
谢谢解惑!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-1-2 22:36:55
没有这样的限制的,是你引用的方法不对,a.unit_price这样不行的,直接用变量名unit_price。
%let price=unit_price;
%let number=tran_capacity;
data a;
totalpay=&price*&number;
set a;
run;
这样应该没问题的。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-2 22:58:55
CTR1013 发表于 2013-1-2 22:36
没有这样的限制的,是你引用的方法不对,a.unit_price这样不行的,直接用变量名unit_price。
%let price=u ...
谢谢。这个命令确实是正确的。
但是,为什么输出结果是这样:
totalpay unit_price tran_capacity
       .        2          3
       6        1          .
       .         4          5
      20        2         8
      16        .          .
也就是说,计算的unit_price 和tran_capacity的乘积在下一行出现。
这是为什么呢?谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-2 23:03:40
大概是sas的机制问题,你要把计算结果放在当前行就把set a;放在totalpay=&price*&number;前面
%let price=unit_price;
%let number=tran_capacity;
data a;
set a;
totalpay=&price*&number;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-2 23:24:13
CTR1013 发表于 2013-1-2 23:03
大概是sas的机制问题,你要把计算结果放在当前行就把set a;放在totalpay=&price*&number;前面
%let price= ...
我按照您的方法试了一下,这次对了,谢谢不吝赐教!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-8-7 10:34:38
因为在读入数据之前 PDV中会把每个变量设置为missing
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群