SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 845|回复: 2
打印 上一主题 下一主题

为什么引用宏变量得不到预期结果?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2004-5-21 10:12:26 | 只看该作者

为什么引用宏变量得不到预期结果?

问题如下:
1、我想从hgdm数据集中产生宏变量 hgdm , d_num, hgdm 与d_num 是一一对应的。
2、然后利用产生的宏变量对jyjl数据集进行计算收益,hgdm='200001'时,计算收益return时d_num取 1,其他类似。
3、我用了symget 读取symput产生的宏变量,为什么得不到结果呢?

[code:bd978]data jyjl;
  input jrzq $ zqdm $ cjjg cjsl hglx $;
  cards;
  20030601  200001   2.1  4000  rqhg
  20030601  200001   2.2  2000  rzhg
  20030602  200001   2.1  4000  rqgh
  20030602  200001   2.2  2000  rzgh
  ;
run;

data hgdm;
  input zqdm $ num;
   call symput('hgdm',trim(left(zqdm)));
   call symput('day_num'||zqdm,put(num,8.));
  cards;
  200001  1  
  200003  3  
  200007  7
  200010  14
  ;

data return;
  set jyjl;
  retain total;
  if zqdm ="&hgdm" then   /* zqdm与宏变量hgdm相等时,宏变量d_num取num的值1计算收益; */
    do;
     if hglx= 'rqhg' then
       do;
        return =(symget('d_num'||zqdm))/360*cjjg*cjsl;   
        total = sum(total,return);
      end;
     if hglx= 'rzhg' then
       do;
        return = -(symget('d_num'||zqdm))/360*cjjg*cjsl;  
        total = sum(total,return);
      end;
     else total = total;
   end;
run; [/code:bd978]

困惑中~~
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2004-5-21 10:15:13 | 只看该作者
试试这个
[code:4b445]data jyjl;
  input jrzq $ zqdm $ cjjg cjsl hglx $;
  cards;
  20030601  200001   2.1  4000  rqhg
  20030601  200001   2.2  2000  rzhg
  20030602  200001   2.1  4000  rqgh
  20030602  200001   2.2  2000  rzgh
  ;
run;

data hgdm;
  input zqdm $ num;
  cards;
  200001  1  
  200003  3  
  200007  7
  200010  14
  ;

PROC SQL;
        SELECT SUM((CASE S.HGLX
                                WHEN 'rqhg' THEN NUM
                                WHEN 'rzhg' THEN -NUM
                        END) /360*S.cjjg*S.cjsl) AS TOTAL FROM JYJL S,HGDM T
                        WHERE S.zqdm=T.zqdm;
QUIT;[/code:4b445]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2004-5-21 10:16:47 | 只看该作者
宏变量引用需要加双引号,而且你的第一个SYMPUT,执行完了以后,只把最后一个赋给了变量
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-1-10 15:43 , Processed in 0.176775 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表