楼主: pinggu2688
6127 8

SAS ADV一道题求助 [推广有奖]

  • 2关注
  • 0粉丝

博士生

5%

还不是VIP/贵宾

-

威望
0
论坛币
42 个
通用积分
40.5335
学术水平
1 点
热心指数
3 点
信用等级
1 点
经验
3113 点
帖子
166
精华
0
在线时间
100 小时
注册时间
2009-11-12
最后登录
2023-12-9

10论坛币
The following SAS program is submitted:
%let test = one;
%let one = two;
%let two = three;
%let three = last;
%put what displays is &&&&&test;
What is written to the SAS log?
(A) what displays is one
(B) what displays is two
(C) what displays is three
(D) what displays is last
请给出详细解释,顺便问下如果问题改为以下5个:
%put what displays is &&&test;
%put what displays is &&&&test;
%put what displays is &&&&&test;
%put what displays is &&&&&&test;
%put what displays is &&&&&&&test; (甚至更多&)将怎么解释,多谢,这个问题困扰我很久。

最佳答案

shmilyshmily 查看完整内容

5 个&的output是 two 基本规则是: 1.系统把2个&变成一个,前面四个& 变成 & & 2. 剩下&test 变成 one 到此系统得到的变量是 &&one 重复上面的步骤: 1. 将两个&变成一个,得到&one 所以最后结果是&one=two 从上面的分析可以看出 2n个&和n个&的效果是一样的 用这个小技巧做题的时候可以简化很多 根据这些规则楼主可以验证: 若有1,2,4,8,。。。个&,输出为one 3,5,6,9 。。。个&, 输出为two 7个&,输出为thre ...
关键词:following displays Display Program written 求助 SAS adv

回帖推荐

shmilyshmily 发表于3楼  查看完整内容

5 个&的output是 two 基本规则是: 1.系统把2个&变成一个,前面四个& 变成 & & 2. 剩下&test 变成 one 到此系统得到的变量是 &&one 重复上面的步骤: 1. 将两个&变成一个,得到&one 所以最后结果是&one=two 从上面的分析可以看出 2n个&和n个&的效果是一样的 用这个小技巧做题的时候可以简化很多 根据这些规则楼主可以验证: 若有1,2,4,8,。。。个&,输出为one 3,5,6,9 。。。个&, 输出为two 7个&, ...

本帖被以下文库推荐

沙发
shmilyshmily 发表于 2010-8-3 05:12:28 |只看作者 |坛友微信交流群
5 个&的output是 two
基本规则是:
1.系统把2个&变成一个,前面四个& 变成 & &
2. 剩下&test 变成 one
到此系统得到的变量是 &&one
重复上面的步骤:
1. 将两个&变成一个,得到&one
所以最后结果是&one=two
从上面的分析可以看出 2n个&和n个&的效果是一样的 用这个小技巧做题的时候可以简化很多
根据这些规则楼主可以验证:
若有1,2,4,8,。。。个&,输出为one
3,5,6,9 。。。个&, 输出为two
7个&,输出为three
一下为SAS网站上找到的一个例子:
%put &&city&n;  /* correct */
If &N contains 6, when the macro processor receives this statement, it performs the following steps:
1.resolves && to &
2.passes CITY as text
3.resolves &N into 6
4.returns to the beginning of the macro variable reference, &CITY6, starts resolving from the beginning again, and prints the value of CITY6

使用道具

藤椅
shmilyshmily 发表于 2010-8-3 06:17:47 |只看作者 |坛友微信交流群
5 个&的output是 two
基本规则是:
1.系统把2个&变成一个,前面四个& 变成 & &
2. 剩下&test 变成 one

到此系统得到的变量是 &&one

重复上面的步骤:
1. 将两个&变成一个,得到&one

所以最后结果是&one=two

从上面的分析可以看出 2n个&和n个&的效果是一样的 用这个小技巧做题的时候可以简化很多

根据这些规则楼主可以验证:
若有1,2,4,8,。。。个&,输出为one
3,5,6,9 。。。个&, 输出为two
7个&,输出为three

一下为SAS网站上找到的一个例子:
%put &&city&n;  /* correct */
If &N contains 6, when the macro processor receives this statement, it performs the following steps:

1.resolves && to &

2.passes CITY as text

3.resolves &N into 6

4.returns to the beginning of the macro variable reference, &CITY6, starts resolving from the beginning again, and prints the value of CITY6


希望对楼主有帮助。
已有 2 人评分论坛币 收起 理由
bakoll + 3 精彩帖子
peijiamei + 100 精彩帖子

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

使用道具

板凳
lijieqiang369 发表于 2010-8-3 08:20:17 |只看作者 |坛友微信交流群
哈哈,谢谢2#,受教了!

使用道具

报纸
xuwei2007 发表于 2010-8-3 15:21:50 |只看作者 |坛友微信交流群

使用道具

地板
pinggu2688 发表于 2010-8-6 07:09:23 |只看作者 |坛友微信交流群
觉得解释的有些牵强----不同顺序是不一样的结果。
,2楼解释的是:&&&&&test->(&&)(&&)(&test)->(&&)(one)->&one=two
但有什么规则能按这样的顺序resolve?为什么不是其他顺序?比如&&&&test 为什么不是(&&)&(&test)->
&&one->(&&)one->&one->two????
回帖辛苦,谢谢,奖给你了。

使用道具

7
tinyhuhu 发表于 2010-11-15 10:50:12 |只看作者 |坛友微信交流群
two :):):)

使用道具

8
shujunlunaliu 发表于 2015-7-9 01:02:38 |只看作者 |坛友微信交流群
pinggu2688 发表于 2010-8-6 07:09
觉得解释的有些牵强----不同顺序是不一样的结果。
,2楼解释的是:&&&&&test->(&&)(&&)(&test)->(&&)(one) ...
根据SAS prep guide上讲的,我的理解是:系统scan到五个&之后会把这些符号两两合并,变成(&&)(&&)(&test), 然后变成(&) (&) (&test)
然后&test=one,-》&&one
同理&&合并为&,-》&one=two

使用道具

9
Tigflanker 发表于 2015-7-9 13:48:31 |只看作者 |坛友微信交流群
%let test = one;
%let one = two;
%let two = three;
%let three = last;
%put what displays is &&&&&test;

&&&&&test 自身以循环方式解析完毕。

&& && &test第一次解析:第一个&屏蔽第二个&的功能,&test解析成one
变成:& & one

&& one第二次解析:第一个&屏蔽第二个&的功能,one被凉在那儿了
变成:& one

&one ==> two
以上内容所加的空格为助于理解;SAS认为第一个单元符号(&和%)对下一个单元进行解析或屏蔽

&&(屏蔽),&one(解析)都是一次操作

如有理解不准确,还请指出。

使用道具

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

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

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

GMT+8, 2024-4-27 12:22