楼主: cindy2468
1799 8

[问答] 谁能帮我看看这段code 万分感谢 [推广有奖]

  • 0关注
  • 0粉丝

本科生

0%

还不是VIP/贵宾

-

威望
0
论坛币
98 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
348 点
帖子
48
精华
0
在线时间
62 小时
注册时间
2016-3-16
最后登录
2017-7-12

楼主
cindy2468 发表于 2016-6-5 12:28:54 |AI写论文
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步创造 ...
关键词:code 万分感谢 COD ODE observation

沙发
闲云旧雨 在职认证  发表于 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的。
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 40 + 2 + 2 + 2 热心帮助其他会员

总评分: 论坛币 + 40  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

藤椅
runafterwind 发表于 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;
已有 1 人评分论坛币 收起 理由
admin_kefu + 10 热心帮助其他会员

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

板凳
cindy2468 发表于 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
;

7
cindy2468 发表于 2016-6-5 21:15:44
闲云旧雨 发表于 2016-6-5 21:03
首先你要明确你这段代码到底想完成得任务是什么。原始代码看不懂你要干啥。。。你建了三个数据集 c1 c2 oth ...
非常感谢!!  可是为何我原来写的代码跑出来是C1,C2各有三个观测呢?
这道题是base70题第35题变形
given the SAS data set SASDATA.TWO:
X Y
-- --

5 2
3 1
5 6
The following SAS program is submitted:
data SASUSER.ONE SASUSER.TWO OTHER;
set SASDATA.TWO;
if X eq 5 then output SASUSER.ONE;
if Y lt 5 then output SASUSER.TWO;
else output;
run;
What is the result?
我就是想用sas跑一遍来知道结果。可是我自己写的代码跑出来结果是sasuers.one and sasuser.twp各有三个观测。

8
cindy2468 发表于 2016-6-5 21:56:26
谁能帮忙解答吗 拜托 万分感谢

9
dhz5738 发表于 2016-6-13 14:58:39
data SASUSER.ONE SASUSER.TWO OTHER;
set SASDATA.TWO;
if X eq 5 then output SASUSER.ONE;
if Y lt 5 then output SASUSER.TWO;
else output OTHER;
run;
最后一个output 要加上输入的dataset,这样才能保证one &two 输出正确结果,如果不加other,则会将数据 5 6重复输出到dataset one& two中。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-22 17:16