第一个问题很有意思,试了几次后有如下发现:
1. 将宏内宏外的%put语句改作:%put 90%*50%;,日志输出为:
宏内:90
宏外:90%*50%
2. 将宏内宏外的%put语句改作:%put 90%;,日志输出为:
宏内:90%
宏外:90%
从现象上来看,似乎宏内的“%*”组合被SAS当成了“宏内注释”,使得“%*50”完全沦为了注释内容。为了验证这一点,我做了如下实验:
3. 将test数据集中的“%”改为“#”,此时日志输出为: 宏内:90#*50#
宏外:90#*50#
4. 将select语句改为:
- select a into :temp separated by "#" from test;
宏内:90%#50%
宏外:90%#50%
至此,上述判断:
宏内的“%*”组合被SAS当成了“宏内注释”
至此,我解释了现象,但仍不清楚原因。