全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1820 8
2016-06-05
悬赏 100 个论坛币 已解决
data C1 C2 other;
set TEST;
input x y;
cards;
5 2
3 1
5 6
;
if X eq 5 then output C1;
if Y lt 5 then output C2;
else output;
run;

为何我跑出来的结果是C1有三个observation, C2有三个observation? 请问如果我想要C1和C2是两个observation, 应该怎么写,if语句条件必须是if X eq 5 then output C1;
if Y lt 5 then output C2;

最佳答案

闲云旧雨 查看完整内容

你的原始代码有问题(cards和数据流部分一定要在data步的最后)我改成这样了(去除了和你问题无关的other test数据集): data C1 C2; input x y; if X eq 5 then output C1; if Y lt 5 then output C2; else output; cards; 5 2 3 1 5 6 ; 注意你的代码中的这两句: if Y lt 5 then output SASUSER.TWO; else output; output语句中没指定out=哪个数据集。那么SAS默认是输出到你这个data步创造 ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-6-5 12:28:55
cindy2468 发表于 2016-6-5 21:15
非常感谢!!  可是为何我原来写的代码跑出来是C1,C2各有三个观测呢?
这道题是base70题第35题变形
giv ...
你的原始代码有问题(cards和数据流部分一定要在data步的最后)我改成这样了(去除了和你问题无关的other test数据集):
data C1 C2;
input x y;
if X eq 5 then output C1;
if Y lt 5 then output C2;
else output;
cards;
5 2
3 1
5 6
;
注意你的代码中的这两句:
    if Y lt 5 then output SASUSER.TWO;
    else output;
output语句中没指定out=哪个数据集。那么SAS默认是输出到你这个data步创造的所有数据集中的(c1和c2)而且这个else是跟着 if y lt 5 这个条件走的。也就是说如果y小于5 那么这条观测输出c2,如果y大于等于5,那么这条观测会输出到c1 c2两个数据集中。
详细过一遍这三个观测是怎么被处理的:
第一条观测x=5 y=2:满足第一个if,所以c1里有这条观测;满足第二个if,所以c2里有这条观测
第二条观测x=3 y=1: 不满足第一个if,没有输出到c1;满足第二个if,所以c2里有这条观测
第三条观测x=5 y=6: 满足第一个if 所以c1里写入这条观测,满足了第二个if的else条件,执行了output语句,所以再次被output到c1一遍,c2里也有了这条观测。
所以最后c1数据集中的三个观测是52/56/56 因为56这个被output了两次
而c2数据集中三个观测是52/31/56因为无论y是否小于等于5都会被output到c2的。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-6-5 13:50:46
Try this:

data C1 C2 other;
set TEST;
input x y;
if X eq 5 then output C1;
if Y lt 5 then output C2;
else output;
cards;
5 2
3 1
5 6
;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-6-5 21:03:23
runafterwind 发表于 2016-6-5 13:50
Try this:

data C1 C2 other;
不对啊 跑出来没有observation
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-6-5 21:03:44
首先你要明确你这段代码到底想完成得任务是什么。原始代码看不懂你要干啥。。。你建了三个数据集 c1 c2 other, 然后还有test这么个数据集。。。
我就按照我理解的来了:从cards数据流读取数据,按照你规定的条件选择分别写入到c1和c2这两个数据集里。按以下代码运行,c1和c2数据集中各有2个观测。
data C1 C2;
input x y;
if X eq 5 then output C1;
if Y lt 5 then output C2;
cards;
5 2
3 1
5 6
;



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-6-5 21:08:25
首先你要明确你这段代码到底想完成得任务是什么。原始代码看不懂你要干啥。。。你建了三个数据集 c1 c2 other, 然后还有test这么个数据集。。。
我就按照我理解的来了:从cards数据流读取数据,按照你规定的条件选择分别写入到c1和c2这两个数据集里。按以下代码运行,c1和c2数据集中各有2个观测。
data C1 C2;
input x y;
if X eq 5 then output C1;
if Y lt 5 then output C2;
cards;
5 2
3 1
5 6
;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群