全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4547 20
2014-05-01
悬赏 2 个论坛币 已解决
本人有一个数据如下:

  FIRM       YEAR         NAME       NAME_ID      

   A            1999         JACK            001         
   A            1999         BEN             002         
   A            1999         GOOD         010         
   A            1999         RICK            011         
   A            1999         XX               012         
   A            1999         XXX             013         
   A            2000         JACK            001         
   A            2000         BEN             002         
   A            2000         Jason          037         
   A            2000         RICK            011        
   A            2000         XX               012         
   A            2000         XXX             013   


   B           1999          ****          ****     
   B           2000          ****         *****


本人想在这个数据中找出每个公司每年人员离职的情况。以上表为例,对比FIRM A 1999和2000年的数据,我们发现ID 为010的员工没有出现在2000年的数据中,这样我们知道010在2000年离职。也就是说判定离职的标准是对于每一个公司,如果一个员工出现在前一年的数据而没有出现在当年的数据中,那么我们判定该员工离职。

检验所有的数据后希望能够调整出一个firm level的统计结果,大概如下图:TURNOVER是一个dummy,如果公司当年有离职,则dummy=1,没有离职则为0。

FIRM   YEAR  TURNOVER
A        1999       0
A        2000       1
A        2001       1
****
B
C
D  

希望各位大神帮忙,谢谢。

最佳答案

jeozu 查看完整内容

我犯了一个错,忘了是在SAS里。去掉了subquery里的order by就一切正常了。
二维码

扫码加我 拉你入群

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

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

全部回复
2014-5-1 02:08:58
带发修行僧 发表于 2014-5-2 23:09
重新试验了一下,仍然还是老问题
我犯了一个错,忘了是在SAS里。去掉了subquery里的order by就一切正常了。
复制代码
二维码

扫码加我 拉你入群

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

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

2014-5-1 10:45:17
复制代码

二维码

扫码加我 拉你入群

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

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

2014-5-1 23:21:14
复制代码
二维码

扫码加我 拉你入群

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

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

2014-5-2 20:49:43
jeozu 发表于 2014-5-1 10:45
我试验了你的code,SAS显示有如下问题:

437     %let tbl=sample1;
438      proc sql noprint;
439      create table final as
440      select b.firmid
441             , b.fyear
442             , ifn(c.out>0, 1, 0)    as  turnover
443          from (select distinct firmid, fyear from &tbl order by firmid, fyear  )   b left join (
                                                                           -----                         -
                                                                            79                        22
                                                                                                       200
ERROR 79-322: Expecting a ).

ERROR 22-322: Syntax error, expecting one of the following: ;, !, !!, &, (, *, **, +, ',', -,
              '.', /, <, <=, <>, =, >, >=, ?, AND, ASC, ASCENDING, BETWEEN, CONTAINS, DESC,
              DESCENDING, EQ, EQT, GE, GET, GT, GTT, IN, IS, LE, LET, LIKE, LT, LTT, NE, NET,
              NOT, NOTIN, OR, ^, ^=, |, ||, ~, ~=.

ERROR 200-322: The symbol is not recognized and will be ignored.

444               select firmid
                              ------
                               22
ERROR 22-322: Syntax error, expecting one of the following: !, !!, &, (, *, **, +, ',', -, '.',
              /, <, <=, <>, =, >, >=, ?, AND, CONTAINS, EQ, EQT, GE, GET, GT, GTT, LE, LET, LIKE,
              LT, LTT, NE, NET, OR, ^=, |, ||, ~=.

445                    , fyear
446                    , count(directorid) as out
                                           --
                                           22
                                           202
ERROR 22-322: Syntax error, expecting one of the following: !, !!, &, ), *, **, +, ',', -, /, <,
              <=, <>, =, >, >=, ?, AND, BETWEEN, CONTAINS, EQ, EQT, GE, GET, GT, GTT, IN, IS, LE,
              LET, LIKE, LT, LTT, NE, NET, NOT, NOTIN, OR, ^, ^=, |, ||, ~, ~=.

ERROR 202-322: The option or parameter is not recognized and will be ignored.

447                 from (
448                      select *
449                      from &tbl
450                      except (
NOTE: Line generated by the macro variable "TBL".
1     sample1
        -------
         22
        202
451                              select a.*
                                            -
                                           22
                                           76
ERROR 22-322: Syntax error, expecting one of the following: !, !!, &, (, ), *, **, +, ',', -,
              '.', /, <, <=, <>, =, >, >=, ?, AND, BETWEEN, CONTAINS, EQ, EQT, GE, GET, GT, GTT,
              IN, IS, LE, LET, LIKE, LT, LTT, NE, NET, NOT, NOTIN, OR, ^, ^=, |, ||, ~, ~=.

ERROR 202-322: The option or parameter is not recognized and will be ignored.

ERROR 76-322: Syntax error, statement will be ignored.

452                              from &tbl a, &tbl b
453                              where a.firmid    = b.firmid
454                                and a.directorid = b.directorid
455                                and a.fyear +1 = b.fyear
456                              )
457                       )
458                 group by firmid, fyear
459          )c
460          ;
461          quit;

和你的code相比我只改动了变量名字:table name改为sample1; firm 改为firmid; year 改为fyear; name_id 改为directorid ; 其他没有改动。 能否帮我看看原因?谢谢
二维码

扫码加我 拉你入群

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

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

2014-5-2 21:16:34
苹果叶 发表于 2014-5-1 23:21
我只有一个表格,您的代码中a和b分别代表什么?
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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