请选择 进入手机版 | 继续访问电脑版
楼主: lizhewenbei
1244 14

请教大牛,如何做出如下的统计 [推广有奖]

  • 15关注
  • 5粉丝

副教授

36%

还不是VIP/贵宾

-

威望
0
论坛币
309 个
通用积分
11.4770
学术水平
4 点
热心指数
13 点
信用等级
5 点
经验
9699 点
帖子
609
精华
0
在线时间
496 小时
注册时间
2008-2-6
最后登录
2024-1-9

lizhewenbei 学生认证  发表于 2016-9-19 09:36:21 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请教大牛,如何做出如下的统计
姓名2010201120122013期望的统计结果
邹**A车间A车间A车间 1
林**C车间C车间C车间C车间1
林**C车间C车间D车间C车间2
林**C车间C车间C车间C车间1
戴**B车间1
王**B车间1
王*B车间B车间B车间B车间1
高*F车间E车间2
江**E车间E车间E车间1
钱*F车间1
张*E车间E车间1
廖*F车间A车间2
廖*1A车间A车间H车间2
李*E车间G车间A车间A车间3
王*E车间E车间I车间2
臧*E车间E车间E车间 1


二维码

扫码加我 拉你入群

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

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

关键词:如何 统计 姓名

prince315 在职认证  发表于 2016-9-19 13:53:29 |显示全部楼层 |坛友微信交流群
data out;
set in;
array yr{4} $ yr_2010 - yr_2013;
array tmp{4} $ tmp1-tmp4;
do i = 1 to 4; tmp[i] = yr[i]; end; /*临时数值,不改变原值;也可在原值上操作后,只保留最终数值*/

/*将重复值置空*/
do i = 1 to 3;
   do j=i+1 to 4;
       if tmp[j] = "" then continue;
       else if tmp[j]=tmp[i] then tmp[j]="";
   end;
end;

count = 4-cmiss(of tmp1 - tmp4); /*统计非空字段数,即为不重复字段数量*/
drop tmp1-tmp4 i j;
run;
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
lizhewenbei + 5 + 3 + 3 + 3 非常感谢你的指点!
admin_kefu + 20 + 2 + 2 热心帮助其他会员

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

使用道具

wwang111 发表于 2016-9-19 14:43:20 |显示全部楼层 |坛友微信交流群
  1. data wanted;
  2. set test;
  3. array yr{*} yr2010 - yr2013;
  4. array temp{*} $ temp1-temp4;
  5. do i=1 to dim(temp);
  6.   temp{i}=yr{i};
  7. end;
  8. call sortc(of temp1-temp4);
  9. do j=1 to dim(temp)-1;
  10.   if temp{j} ne temp{j+1} and temp{j} ne '' then count+1;
  11. end;
  12. drop temp: i j;
  13. run;
复制代码

已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
lizhewenbei + 5 + 3 + 3 + 3 非常感谢你的指点!
admin_kefu + 20 + 2 + 2 热心帮助其他会员

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

使用道具

wang1839 在职认证  发表于 2016-9-21 08:29:11 |显示全部楼层 |坛友微信交流群
最简单transpose year,然后用SQLcount,最后transpose回来
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
lizhewenbei + 3 + 2 + 2 + 2 精彩帖子

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

使用道具

wang1839 在职认证  发表于 2016-9-21 09:13:43 |显示全部楼层 |坛友微信交流群
  1. data a;
  2. infile datalines missover;
  3. input name $ year2010 $ year2011 $ year2012 $  year2013 $;
  4. cards;
  5. 邹** A车间 A车间 A车间
  6. 林** C车间 C车间 C车间 C车间
  7. 林** C车间 C车间 D车间 C车间  
  8. 林** C车间 C车间 C车间 C车间  
  9. 戴** B车间     
  10. 王** B车间     
  11. 王*  B车间 B车间 B车间 B车间  
  12. 高*  F车间 E车间   
  13. 江** E车间 E车间 E车间   
  14. 钱*  F车间   
  15. 张*  E车间 E车间   
  16. 廖*  F车间 A车间
  17. 廖*  A车间 A车间 H车间  
  18. 李*  E车间 G车间 A车间 A车间
  19. 王*  E车间 E车间 I车间   
  20. 臧*  E车间 E车间 E车间  
  21. ;
  22. run;

  23. data b;
  24.         set a;
  25.         order=_n_;
  26. run;




  27. proc transpose data=b out=c (where=(col1>"")) prefix=col;
  28. by  order ;
  29. var year2010-year2013;
  30. run;




  31. proc sql;
  32.         create table d as select count(unique(col1)) as n ,order from c group by order;
  33. quit;


  34. data final;
  35.         merge b d;
  36.         by order ;
  37. run;
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
lizhewenbei + 5 + 3 + 3 + 3 非常感谢你的指点!
admin_kefu + 30 + 2 + 2 热心帮助其他会员

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

A man who is frustrated will never stand up.

使用道具

lizhewenbei 学生认证  发表于 2016-9-24 08:42:13 |显示全部楼层 |坛友微信交流群
wang1839 发表于 2016-9-21 08:29
最简单transpose year,然后用SQLcount,最后transpose回来
非常感谢哈,大家都好热情!

使用道具

lizhewenbei 学生认证  发表于 2016-9-24 08:43:44 |显示全部楼层 |坛友微信交流群
wang1839 发表于 2016-9-21 09:13
非常感谢你的指点!晚点送上积分奖励,目前系统不让重复送。

使用道具

流水不朽 发表于 2016-9-24 16:14:19 |显示全部楼层 |坛友微信交流群
给种简单的方法
假设tmp 数据集除了 结果变量result 外的数据集
data        tmp_01(keep=num name col_w)
        tmp(keep=num name col_2010-col_2013)
;
    set tmp;
       format col_ $40.;
        col_=catx(',',col_2010,col_2011,col_2012,col_2013);
        n=countw(col_,',');
        num=put(_n_,z2.);
        do i=1 to n by 1;
                col_w=scan(col_,i,col_);
        end;
run;
proc sort data=tmp_01 nodupkey;by num name col_w;run;
data        tmp_02;
    set tmp_01;
     by num name col_w;
     retain result;
     if first.num then
        result=1;
   else result=result+1;
     if last.num;
run;
proc sql;
        creat table result_ as
        select a.*
              ,b.result
          from tmp a
               left outer join
               tmp_02 b
            on a.num=b.num
;
quit;
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
lizhewenbei + 5 + 3 + 3 + 3 非常感谢您的指导!

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

使用道具

sas9.4 发表于 2016-9-25 20:27:45 |显示全部楼层 |坛友微信交流群

这个是最简单的方法

data source;
infile cards missover;
input @1 name $        _2010 $        _2011         $ _2012 $        _2013 $ ;
cards;
邹**        A车间        A车间        A车间        
林**        C车间        C车间        C车间        C车间
林**        C车间        C车间        D车间        C车间
林**        C车间        C车间        C车间        C车间
戴**        B车间                        
王**        B车间                        
王*        B车间        B车间        B车间        B车间
高*        F车间        E车间               
江**        E车间        E车间        E车间        
钱*        F车间                        
张*        E车间        E车间               
廖*        F车间        A车间               
廖*1        A车间        A车间        H车间        
李*        E车间        G车间        A车间        A车间
王*        E车间        E车间        I车间        
臧*        E车间        E车间        E车间        
;

proc iml;
use source;
read all var {name _2010         _2011          _2012         _2013 } into source;
rowUnique = countunique(source, "ROW") -  ifn(COUNTMISS(source, "ROW")>0,1,0) -1 ;
PRINT source[COLNAME={name  _2010         _2011  _2012         _2013}] rowUnique;
quit;
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
lizhewenbei + 5 + 3 + 3 + 3 精彩帖子

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

使用道具

lizhewenbei 学生认证  发表于 2016-10-1 16:35:26 |显示全部楼层 |坛友微信交流群
流水不朽 发表于 2016-9-24 16:14
给种简单的方法
假设tmp 数据集除了 结果变量result 外的数据集
data        tmp_01(keep=num name col_w)
感谢帮助,很棒!

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 02:48