请选择 进入手机版 | 继续访问电脑版
楼主: 小鳄鱼a
2496 18

引用宏变量出现的问题 [推广有奖]

sniperhgy 发表于 2014-10-23 22:27:58 |显示全部楼层 |坛友微信交流群
小鳄鱼a 发表于 2014-10-23 22:01
%quote不仅仅在执行中其作用吧,在编译时是不是也起作用
我的理解是执行时起作用,为什么这么说呢,他的兄弟%nrquote理论上会阻止&的作用的,对吧?但是却是先让被quote的字符尽量解析,直到&不能引出其他的宏变量为止了,如果是编译时就起作用了,那和%nrstr还有什么区别呢?
我的理解:
%str %nrstr都是编译时起作用
%quote %nrquote %bquote %bnrquote 都是执行时起作用
%superq 比较特殊,只解析一次,然后就将&的作用封起来了,但是如果参数不是宏变量的名字,而是带有&的,那就会出现一直解析的情况,直到最后不带&了。
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
小鳄鱼a + 5 + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 5  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

小鳄鱼a 发表于 2014-10-23 22:34:18 |显示全部楼层 |坛友微信交流群
sniperhgy 发表于 2014-10-23 22:27
我的理解是执行时起作用,为什么这么说呢,他的兄弟%nrquote理论上会阻止&的作用的,对吧?但是却是先让被 ...
对编译跟执行的机制还不清楚,只是刚才试了一下,把那些字符串直接放到宏引用跟引用宏变量效果一样,就认为quote编译跟执行都可以,是不是我理解错了

使用道具

sniperhgy 发表于 2014-10-23 22:40:33 |显示全部楼层 |坛友微信交流群
小鳄鱼a 发表于 2014-10-23 22:34
对编译跟执行的机制还不清楚,只是刚才试了一下,把那些字符串直接放到宏引用跟引用宏变量效果一样,就认 ...
对错不敢妄言,只是凭经验和教训得出的一些结论而已,我刚开始学习quote的时候,也挺晕的,后来遇到的实际问题多了,就总结一下,外加搜索外国人的解说。

对于学习的话,我推荐用google来搜索,不要用baidu,毕竟SAS是老外的软件,还是老外研究的透彻一些。
已有 1 人评分论坛币 收起 理由
小鳄鱼a + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

使用道具

小鳄鱼a 发表于 2014-10-23 22:46:06 |显示全部楼层 |坛友微信交流群
sniperhgy 发表于 2014-10-23 22:40
对错不敢妄言,只是凭经验和教训得出的一些结论而已,我刚开始学习quote的时候,也挺晕的,后来遇到的实际 ...
一般去看sas.support 吗

使用道具

小鳄鱼a 发表于 2014-10-23 22:48:28 |显示全部楼层 |坛友微信交流群
%macro dropguance(index=,dat=,delim=%str(,));
  %let i=1;
  %do %while(%scan(%quote(&index),&i,%quote(&delim)) ne );
    %let Nindex=%scan(%quote(&index),&i,%quote(&delim));

    data &dat;
      set &dat;
      if &Nindex=. then delete;
    run;
        %put &i.;
    %let i=%eval(&i+1);
  %end;
%mend;

%let chosevars=cv netppediva bm gsdiva yroevot rsq;

%dropguance(index=%quote(&chosevars),dat=zonghe,delim=%str(,));



我如果想把那些字符串以空格隔开  而不是以逗号   请问其他的部分该怎么修改
%let chosevars=cv netppediva bm gsdiva yroevot rsq;

使用道具

sniperhgy 发表于 2014-10-23 22:51:12 |显示全部楼层 |坛友微信交流群
小鳄鱼a 发表于 2014-10-23 22:46
一般去看sas.support 吗
嗯,官网肯定要看,还有老外的论坛,讨论组什么的,也不能放过,还有一些大牛写的一些分析,读读也有好处(对于英文的提高也是有帮助的)。
已有 1 人评分论坛币 收起 理由
小鳄鱼a + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

使用道具

小鳄鱼a 发表于 2014-10-24 12:53:25 |显示全部楼层 |坛友微信交流群
sniperhgy 发表于 2014-10-23 22:51
嗯,官网肯定要看,还有老外的论坛,讨论组什么的,也不能放过,还有一些大牛写的一些分析,读读也有好处 ...
%macro dropguance(index=,dat=,delim=%str(,));
  %let i=1;
  %do %while(%scan(%quote(&index),&i,%quote(&delim)) ne );
    %let Nindex=%scan(%quote(&index),&i,%quote(&delim));

    data &dat;
      set &dat;
      if &Nindex=. then delete;
    run;
        %put &i.;
    %let i=%eval(&i+1);
  %end;
%mend;

%let chosevars=cv netppediva bm gsdiva yroevot rsq;

%dropguance(index=%quote(&chosevars),dat=zonghe,delim=%str(,));



我如果想把那些字符串以空格隔开  而不是以逗号   请问其他的部分该怎么修改
%let chosevars=cv netppediva bm gsdiva yroevot rsq;

使用道具

pobel 在职认证  发表于 2014-10-24 13:20:27 |显示全部楼层 |坛友微信交流群
sniperhgy 发表于 2014-10-23 21:21
楼主你好,%str和%quote的区别在于,起作用的时间不一样,%str是在编译的时候,%quote是在运行的时候,第 ...
对于%dropguance(index=%str( &chosevars)
我觉得可以补充一点:
这里出错的原因其实是:%str()在起作用的时候,“看不到”逗号。
也就是:%str()作用于字符串&chosevars,而不是宏变量chosevars的值。
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
小鳄鱼a + 5 + 1 + 1 + 1 精彩帖子
sniperhgy + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 5  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

使用道具

sniperhgy 发表于 2014-10-24 13:35:34 |显示全部楼层 |坛友微信交流群
小鳄鱼a 发表于 2014-10-24 12:53
%macro dropguance(index=,dat=,delim=%str(,));
  %let i=1;
  %do %while(%scan(%quote(&index),&i ...
楼主你好,这个改动貌似只要把delim里面的comma换成space就好了,参数里面用space隔开,具体就是:
  1. %macro dropguance(index=,dat=,delim=%str( ));
  2.   %let i=1;
  3.   %do %while(%scan(%quote(&index),&i,%quote(&delim)) ne );
  4.     %let Nindex=%scan(%quote(&index),&i,%quote(&delim));

  5.     data &dat;
  6.       set &dat;
  7.       if &Nindex=. then delete;
  8.     run;
  9.         %put &i.;
  10.     %let i=%eval(&i+1);
  11.   %end;
  12. %mend;

  13. %let chosevars=cv netppediva bm gsdiva yroevot rsq meancashvot yroavot meanygsvot lgcomtrdturnr meanyincomevot cost drsbl owncon1;

  14. %dropguance(index=%quote(&chosevars),dat=zonghe,delim=%str( ));
复制代码
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
小鳄鱼a + 5 + 2 + 2 + 2 精彩帖子

总评分: 论坛币 + 5  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 22:16