楼主: yayacuiliu
7377 10

[问答] 如何将一个数据集中同变量的观测值合并 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

22%

还不是VIP/贵宾

-

威望
0
论坛币
4 个
通用积分
2.0004
学术水平
1 点
热心指数
1 点
信用等级
1 点
经验
2817 点
帖子
87
精华
0
在线时间
158 小时
注册时间
2008-9-16
最后登录
2024-9-27

楼主
yayacuiliu 发表于 2013-4-16 11:46:07 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
数据结构举例如下。"."表示缺省值。
分组    Jan Feb March April May June July August
a          1      .     2       3      2      4      .      4
a          1      .      .       4      .        .       .      5
a          .        .      .       4      .        5     .      5
b          1      .     2       3      2      4      .      4
b          1      .      .       4      .        .       .      5
b          .        .      .       4      .        5     .      5
c          1      .     2       3      2      4      .      4
c          1      .      .       4      .        .       .      5
c          .        .      .       4      .        5     .      5
有两个问题希望能有高手帮帮我。
(1)如何将同一分组内(分组a,b,c)的同一变量的(Jan, Feb,.....)不同观测值合并?
   比如最终希望得到以下结果。
分组    Jan Feb March April May June July August
a          2      .     2      11      2      9    .     14
b          2      .     2      11     2      9      .     14
c          2    .       2       11    2     9      .     1 4
(2)对于合并后的各组,如何计算连续的有观测值的变量个数?
分组    Jan Feb March April May June July August
a          2      .     2       11      2      9     .     14
希望输出    a         Jan              1
                  a        March-June  4
                  a        August         1
谢谢啦!




二维码

扫码加我 拉你入群

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

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

关键词:观测值 数据集 AUGUST March April 数据 如何

沙发
Imasasor 发表于 2013-4-16 12:09:29
看不懂在说什么,问问题完全沉浸在自己的世界里,完全不考虑别人能不能看懂你想要说什么
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

藤椅
yayacuiliu 发表于 2013-4-16 12:15:38
Imasasor 发表于 2013-4-16 12:09
看不懂在说什么,问问题完全沉浸在自己的世界里,完全不考虑别人能不能看懂你想要说什么
可能是我自己叙述有问题,不好意思。我加了举例说明,不知道是否说清楚了。

板凳
pobel 在职认证  发表于 2013-4-16 12:57:12
第二个问题:
data test;
input group $    Jan Feb March April May June July August ;
cards;
a          1      .     2       3      2      4      .      4
a          1      .      .       4      .        .       .      5
a          .        .      .       4      .        5     .      5
b          1      .     2       3      2      4      .      4
b          1      .      .       4      .        .       .      5
b          .        .      .       4      .        5     .      5
c          1      .     2       3      2      4      .      4
c          1      .      .       4      .        .       .      5
c          .        .      .       4      .        5     .      5
d          1      2     2       3      2      4      .     .
d          1      2      3       4      4        5       7      5
d          .        .      .    .         .       .      .      .

;

data wanted;
   set test;
   array tmp(*) jan--august;
   length month $20;
   i=0;
   do until(flag);
       call missing(month);
           *** Get fir non-missing;
           do until(^missing(tmp(i)));
              i+1;
                  if i=8 then leave;
           end;

       *** leave if at the end and is missing;
       if i=8 and missing(tmp(i)) then leave;

           j=i;
           month=vname(tmp(i));
           num=1;

           *** Get the next missing item;
           do until(missing(tmp(i)));
              i+1;
                  if i=9 then leave;
                  if ^missing(tmp(i)) then num+1;
                end;
               
                if j < i-1 then month=catx("-",month,vname(tmp(i-1)));

                *** output ;
                output;
                if i>=8 then flag=1;
        end;
        keep group month num;
run;

     
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Imasasor + 100 + 100 + 5 + 5 + 4 精彩帖子

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

和谐拯救危机

报纸
pobel 在职认证  发表于 2013-4-16 13:00:53
第一个问题可以参考:

proc sql;
  create table wanted as
   select group,sum(jan) as jan, sum(feb) as feb, sum(march) as march,sum(april) as april
     from test
         group by group;
quit;
和谐拯救危机

地板
yeting2000 在职认证  发表于 2013-4-16 13:24:39
看看

7
rdwalk 发表于 2013-4-16 15:01:46
第一个问题
data aaa;
  input group $1. Jan Feb March April May June July August ;
  datalines;
a          1      .     2       3      2      4       .      4
a          1      .     .       4      .      .       .      5
a          .      .     .       4      .      5       .      5
b          1      .     2       3      2      4       .      4
b          1      .     .       4      .      .       .      5
b          .      .     .       4      .      5       .      5
c          1      .     2       3      2      4       .      4
c          1      .     .       4      .      .       .      5
c          .      .     .       4      .      5       .      5
;
run;
\*11111111111111111111111111111111111*\;
proc sort data=aaa;
  by group;
run;
data bbb;
  set aaa;
  by group;
  array mon[8] Jan Feb March April May June July August;
  array smon[8] smon1-smon8;
  do i=1 to 8;
    if first.group then
          smon[i]=mon[i];
        else smon[i]+mon[i];       
  end;
  if last.group;
  keep group smon1-smon8;
run;
proc print;run;
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Imasasor + 80 + 80 + 3 + 4 + 3 精彩帖子

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

8
yayacuiliu 发表于 2013-4-16 17:04:17
pobel 发表于 2013-4-16 12:57
第二个问题:
data test;
input group $    Jan Feb March April May June July August ;
谢谢热心帮助,学习了!

9
yayacuiliu 发表于 2013-4-16 17:04:51
rdwalk 发表于 2013-4-16 15:01
第一个问题
data aaa;
  input group $1. Jan Feb March April May June July August ;
谢谢热心帮助,学习了!

10
yongyitian 发表于 2013-4-17 02:30:17
data have;
input gp $ Jan Feb March April May June July August;
datalines;
a     1     .     2     3     2     4     .     4
a     1     .     .     4     .     .     .     5
a     .     .     .     4     .     5     .     5
b     1     .     2     3     2     4     .     4
b     1     .     .     4     .     .     .     5
b     .     .     .     4     .     5     .     5
c     1     .     2     3     2     4     .     4
c     1     .     .     4     .     .     .     5
c     .     .     .     4     .     5     .     5
d     1     2     2     3     2     4     .     .
d     1     2     3     4     4     5     7     5
d     .     .     .     .     .     .     .     .
; run;
proc print data=have; title 'have'; run; title;
proc sql;
     create table results_1 as
     select distinct gp, sum(Jan) as Jan, Sum(Feb) as Feb, Sum(March) as March,
                         sum(April) as April, sum(May) as May, sum(June) as June,
                         sum(July) as July, sum(August) as August
        from have
        group by gp;
quit;
proc print data=Results_1; title 'Results_1'; run; title;
results_1.bmp

proc transpose data=Results_1 out=have1(rename=(_name_=month));
    by gp;
run;
proc sort data=have1;
     by gp;
run;
data have2;
length add_month $40.;
retain add_month sgp;
    set have1;
    by gp;
    if first.gp then do;
             n = 0;
             add_month = month;
             sgp = 0;
       end;
    if col1 ^=. then do;
         n+1;
          if n=1 then do;
              add_month=month;
              sgp+1;
          end;
    end;
    if missing(col1) then  do;
          n=0;
          sgp+1;
          call missing(add_month);
    end;
keep gp sgp add_month month n;
run;
     
proc sort data= have2 out=have3;
    by gp sgp n;
run;
data results_2 (rename=(add_month=month));
     set have3;
     by gp sgp n;
       if n=0 then delete;
       if last.sgp and not first.sgp then  add_month = catx('_', add_month, month);
       if last.sgp then  output;
       drop sgp month;
run;
proc print data=results_2; var gp month n; title 'results_2'; run;

Results_2
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
rdwalk + 1 + 1 + 1 精彩帖子.学习了,大牛!

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-4 00:06