请选择 进入手机版 | 继续访问电脑版
楼主: 乐天天12300
1772 3

[有偿编程] 救救孩子吧 [推广有奖]

  • 0关注
  • 3粉丝

讲师

91%

还不是VIP/贵宾

-

威望
0
论坛币
4798 个
通用积分
359.7619
学术水平
60 点
热心指数
70 点
信用等级
42 点
经验
9952 点
帖子
242
精华
0
在线时间
985 小时
注册时间
2016-11-28
最后登录
2024-4-1

100论坛币
以下程序,一个在宏内执行,一个在开放代码中执行,为什么结果不一样,对于宏内我知道可以用%sepurq来获取和开放代码状态下的一样结果,但是它为什么会出现这种情况。还有我想要用fcmp过程步,实现一个函数,其中用到run_macro来获取宏里的一个宏变量值,但是这个宏变量值带有%号,我无论怎样做都无法获取完整的字符串。
data test;
a="90%";
output;
a="50%";
output;

/***************** 开放执行 ***************/
proc sql;
    select a into :temp separated  by "*" from test;
quit;

%put 开放执行 &temp.;

/*********************** 宏里执行 **************/
%macro test;
   
    proc sql;
        select a into :temp separated  by "*" from test;
    quit;
   
    %put 宏内 &temp.;
%mend;

%test;

最佳答案

whymath 查看完整内容

run_macro我用的少,不敢妄言。 第一个问题很有意思,试了几次后有如下发现: 1. 将宏内宏外的%put语句改作:%put 90%*50%;,日志输出为: 宏内:90 宏外:90%*50% 2. 将宏内宏外的%put语句改作:%put 90%;,日志输出为: 宏内:90% 宏外:90% 从现象上来看,似乎宏内的“%*”组合被SAS当成了“宏内注释”,使得“%*50”完全沦为了注释内容。为了验证这一点,我做了如下实验: 3. 将test数据集中的“%”改为“ ...
已有 1 人评分论坛币 收起 理由
whymath + 5 观点有启发

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

whymath 发表于 2022-5-13 09:43:38 |显示全部楼层 |坛友微信交流群
run_macro我用的少,不敢妄言。
第一个问题很有意思,试了几次后有如下发现:
1. 将宏内宏外的%put语句改作:%put 90%*50%;,日志输出为:
   宏内:90
   宏外:90%*50%
2. 将宏内宏外的%put语句改作:%put 90%;,日志输出为:
   宏内:90%
   宏外:90%
从现象上来看,似乎宏内的“%*”组合被SAS当成了“宏内注释”,使得“%*50”完全沦为了注释内容。为了验证这一点,我做了如下实验:
3. 将test数据集中的“%”改为“#”,此时日志输出为:   宏内:90#*50#
   宏外:90#*50#
4. 将select语句改为:
  1.     select a into :temp separated  by "#" from test;
复制代码
此时日志输出为:
   宏内:90%#50%
   宏外:90%#50%

至此,上述判断:
宏内的“%*”组合被SAS当成了“宏内注释”
被证实。

至此,我解释了现象,但仍不清楚原因。
SASUSER

使用道具

whymath 发表于 2022-5-13 11:25:01 |显示全部楼层 |坛友微信交流群
更新:
我在帮助文档中找到关于宏注释的描述:
Macro comment statements are not recognized when they are enclosed in quotation marks.
将宏内的输出语句改为:
  1. %put "&temp.";
复制代码

日志输出为:
   宏内:"90%*50%"
   宏外:"90%*50%"

这从侧面印证了题目中的 "%*" 在宏内部确实被当成了宏注释语句。
SASUSER

使用道具

whymath 发表于 2022-5-13 11:25
更新:
我在帮助文档中找到关于宏注释的描述:将宏内的输出语句改为:
感谢兄弟,SAS留给我们的字符不多呀。真坑。

使用道具

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

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

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

GMT+8, 2024-4-16 20:13