SAS中文论坛

标题: 为什么引用宏变量得不到预期结果? [打印本页]

作者: shiyiming    时间: 2004-5-21 10:12
标题: 为什么引用宏变量得不到预期结果?
问题如下:
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]

困惑中~~
作者: shiyiming    时间: 2004-5-21 10:15
试试这个
[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]
作者: shiyiming    时间: 2004-5-21 10:16
宏变量引用需要加双引号,而且你的第一个SYMPUT,执行完了以后,只把最后一个赋给了变量




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2