f**n 发帖数: 98 | 1 P.S.是一道面试题,但不是原题。当时没做出来,看那位大牛能给个答案,非常感谢!
题目是:有个survey有13道题,每一题按自己意愿选1~9分,得7分及以上的算高。最后
要统计每个人得了几个高,如果达到9个,这个人就算高,否则不管。
我的做法是先把达到7的转成1,其余转成0,然后sum。 但第一步转换就出了问题(
suppose survey is the data):
data survey;
input Q1-Q13;
cards;
7 8 9 7 1 1 4 6 5 7 8 9 5
7 8 9 7 1 1 4 6 5 7 8 9 5
7 8 9 7 8 1 4 6 5 7 8 9 5
7 8 9 7 8 9 4 1 5 1 8 9 5
7 8 9 7 8 9 4 6 5 7 1 1 5
7 8 9 7 8 9 4 6 5 7 8 9 5
7 8 9 7 8 9 4 6 5 1 1 1 5
7 8 9 7 8 9 4 6 5 3 1 9 5
7 8 9 7 8 9 4 6 5 7 2 9 5
7 8 9 7 8 9 9 6 5 7 8 9 9
run;
%macro Question(num);
%do i=1 %to #
if Q&i>6 then Q&i=1;
else Q&i=0; output;
%end;
%mend Question;
options mprint mlogic;
data new;
set survey;
%Question(13)
run;
proc print data=new; run;
运行后程序有误。如果在调用%Question的时候加上一个 ; 倒是有结果出来但是算的不
对。
另外我写macro之前测过下面的程序是好的:
data new1;
set survey;
if Q1>7 then Q1=1;
else Q1=0;
run;
而且把macro 里面的do loop 如果不执行 if else,而是简单的赋值语句比如Q&i=1;
也是可以work的。请牛人帮忙指正一下到底问题出在哪里呀?
拜谢! |
j******o 发帖数: 127 | |
P****D 发帖数: 11146 | 3 data new;
set survey;
array answer {*} Q1-Q13;
array binaryanswer {*} QBin1-QBin13;
do i=1 to HBOUND(answer);
if answer{i}>6 then binaryanswer{i}=1;
else binaryanswer{i}=0;
end;
if sum(of QBin1-QBin13)>=9 then High=1;
else High=0;
drop QBin1-QBin13 i;
run;
我觉得你对do loop还不太熟练。循环里那个i不是那样用的。建议找两个例子仔细学习
一下。另祝你顺利找到工作! |
s******8 发帖数: 102 | 4 data new;
set survey;
array q(13) q1-q13;
t=0;flag=0
do i=1 to 13;
t+q(i)>6;
end;
if t ge 9 then flag=1;
drop t;
run; |
f**n 发帖数: 98 | 5 非常感谢楼上两位的solution。都work得很好 (sun那个flag=0后面加一个;就没有bug
了)。我当时是用这个例子(example 1)http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a000543755.htm 做的,看来对do loop的理解的确不够。 谢谢呆哥的指正。我自己是做建模的,SAS是副业,所以就学艺不精了 呵呵。
请问谁能告诉我怎么送包子吗?想送几个包子给楼上两位以表谢意。 |
f**n 发帖数: 98 | 6 另外再请教一下呆哥,有没有哪里有比较好的给出各种实用例子的资源啊?从例子里学
的确比看说明要有效率的多。 |
k*z 发帖数: 4704 | 7 俄。。。我没工作的时候总是听到建模就高山仰止。。。现在听到建模就捂嘴偷笑。 |
f**n 发帖数: 98 | 8 让牛人见笑了 :-) 我们是搞认知基础研究的,所以develop model是主要工作了,的
确不比在industry那么“实用”。现在找工作反正看到相关的都投一下了,不管能不能
上也是个锻炼。 |
P****D 发帖数: 11146 | 9 如何发包子呢?(10个伪币为一个包子)家页--个人参数设置--金融中心--银行转账--
填入用户ID、伪币金额
【在 f**n 的大作中提到】 : 让牛人见笑了 :-) 我们是搞认知基础研究的,所以develop model是主要工作了,的 : 确不比在industry那么“实用”。现在找工作反正看到相关的都投一下了,不管能不能 : 上也是个锻炼。
|
f**n 发帖数: 98 | 10 多谢多谢! 我还以为自己有不少包子呢,原来只有3.5个 :p 转了2个给呆哥,1个给
sun,不好意思啦,很少发帖,show hand了 :-) |
l****y 发帖数: 108 | 11 lz的code就是macro里面多了一个output
如果把那个output去掉,结果就对了,
不过当然还是用array比较方便啦 |