全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2811 5
2017-04-18
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?
谢谢!
二维码

扫码加我 拉你入群

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

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

全部回复
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

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

扫码加我 拉你入群

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

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

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的长度看齐。不然这也太***了,如果都是这个结果,那还要第三个参数特地定义子字符串要取多长做什么用呢?

二维码

扫码加我 拉你入群

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

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

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';
不好意思这么久才回复你啊!
今天去考试了,刚有时间跑一下程序,确实是你说的这样。我也难以解答了。搜索了一下发现其他论坛(好像是未名?)也有人提出了这个问题,你们可以讨论一下?
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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