楼主: __简。
2848 5

[问答] 求教BASE 123题第16题,谢谢 [推广有奖]

  • 0关注
  • 0粉丝

本科生

25%

还不是VIP/贵宾

-

威望
0
论坛币
15 个
通用积分
5.2933
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
669 点
帖子
26
精华
0
在线时间
139 小时
注册时间
2013-3-31
最后登录
2020-9-1

楼主
__简。 发表于 2017-4-18 23:53:18 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
16. data work.empsalary;
set work.people (in=inemp)
     work.money (in=insal);
if insal and inemp;
run;

the sas data set work.people has 5 observations, and the data set work.money has 7 observations.
how many observation will the data set work.empsalary contain?

答案是0个。
米粮包中的解释是:because in it a set statement not merge, so only inemp or insal can be true at one time.

我的疑问是,set的作用是纵向合并两个data set,那为什么insal和inemp每次只能有一个是true?
谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:Base observations observation statement observat

沙发
foocares 发表于 2017-4-19 00:37:54
这题考的是in=的判断条件。
原题可能出得不大好,但想说的情况大概是这样的:

dataset work.people                 dataset work.money
Num     Var A                              Num     Var B
1           A1                                  2           B1
2           A2                                  3           B2
3           A3                                  4           B3

在拼接以后,新dataset work.empsalary在数据集pdv里长这个样:
Num   Var A  Var B
1        A1       .
2        A2       .
3        A3       .
2         .       B1
3         .       B2
4         .       B3

两个dataset各自对合并后的新dataset贡献了一半数据,但看每一行时,要么是A贡献了(In=inemp),要么是B贡献的(in= insal),
但两者未能同时贡献。所以比较里的and关系不成立。

兄弟如此有心,不如先来看看123中的72和73题?求解惑~

藤椅
__简。 发表于 2017-4-19 02:44:34
foocares 发表于 2017-4-19 00:37
这题考的是in=的判断条件。
原题可能出得不大好,但想说的情况大概是这样的:
太感谢了。关于这个16题,我找到了一个解释是说:SET两个DATA SET, 将顺序依次进入PDV,不可能出现某条观测值同时出现在两个DATA SET中。你的解释更加清楚,谢谢!

关于72和73,我觉得72做出正确的选择应该没有什么问题,主要是73,对于SUBSTR返回的变量长度。
https://bbs.pinggu.org/thread-2872824-1-1.html
这个贴有高手回复说,
If the SUBSTR function returns a value to a variable that has not yet been assigned a length, by default the variable length is determined by the length of the first argument.
所以73题里SUBSTR返回值的变量长度应该和它的第一个argument的长度相同,也就是Ipswich, England的长度16.
16+2+7=25

我也是刚开始学,没有很深刻的理解,你可以再搜索看看哈。
再次感谢!

板凳
foocares 发表于 2017-4-19 03:42:07
__简。 发表于 2017-4-19 02:44
太感谢了。关于这个16题,我找到了一个解释是说:SET两个DATA SET, 将顺序依次进入PDV,不可能出现某条观 ...
这个substr的返回值是一个令人抓狂的问题,如果根据little sas book上的举例来看,就跟解释相悖。
在第83页3.3章的表里, 给出的例子是:
给出a='(916)734-6281';
x=SUBSTR(a,2,3);
那么x的值,在书上给出的是'916' --- 而不是'916         '后头再补一堆空格向源字符串a的长度看齐。不然这也太***了,如果都是这个结果,那还要第三个参数特地定义子字符串要取多长做什么用呢?

报纸
foocares 发表于 2017-4-19 03:49:11
为此我特意跑了一小段程序,感觉SAS自己也是矛盾的:
data _null_;
        a_char = 'Ipswich, England';
        clength0 = length(a_char);
        *length b_char $7;  /*这行注释如果打开,那就妥妥没问题*/
           b_char = substr(a_char,1,7);
           clength1 = length(b_char);
           c_char = b_char!!', '!!'England';
           clength2 = length(c_char);
           *put b_char= c_char= clength1= clength2=;
        put _all_;
run;

我得到的运行结果是:
a_char=Ipswich, England clength0=16
b_char=Ipswich clength1=7
c_char=Ipswich         , England    clength2=25
_ERROR_=0 _N_=1

这里b_char的结果和长度都没问题,是想象中的7,没有后续空格。那本来我想,拼接后也就是7+2+7=16啦。
然鹅,只要再做字符串的拼接,空格就凭空长出来了,这不是自相矛盾么?

地板
__简。 发表于 2017-4-20 11:57:51
foocares 发表于 2017-4-19 03:49
为此我特意跑了一小段程序,感觉SAS自己也是矛盾的:
data _null_;
        a_char = 'Ipswich, England';
不好意思这么久才回复你啊!
今天去考试了,刚有时间跑一下程序,确实是你说的这样。我也难以解答了。搜索了一下发现其他论坛(好像是未名?)也有人提出了这个问题,你们可以讨论一下?

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

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