巧用merge

4 篇文章 1 订阅

问题:编号为1,2,3,4的试验中心,每个中心有编号为1,2,3,4,5,6的试验动物,想要记录对不同中心的不同编号的动物的试验次数进行统计总结如下表

中心编号试验编号计数
11 
12 
13 
14 
15 
16 

 

但你的原始数据为一条观测代表一次测试,数据记录如下:第一条代表对中心1试验编号为1的动物进行一次试验。

中心编号试验编号
11
15
13

 

考虑到存在某些动物没进行试验,所以对原始数据集直接求计数得到上述总结表格的形式。

思路:可以根据中心编号以及动物编号的个数,先构造一个4*6行3列的表格,计数赋值为0.

然后对原始数据进行计数,根据中心编号以及试验编号进行排序,最后与构造出来的表格右merge在一起,就可以得到不同试验中心的不同动物的计数总结。

举个例子

*create the data set for count;
data a;
input x y @@;
cards;
1 2 2 3 3 4 4 2 1 4
1 5 1 5 1 2 1 4 2 4 
3 4 4 2 2 4 2 3 2 4
;
run;
*use proc freq get the count ;
proc freq data = a noprint;
table x*y / out = f;
run;
*create the dataset include all kinds groups;
data b;
do x = 1 to 4 by 1;
  do y = 1 to 6 by 1;
    count = 0;
	output;
	end;
	end;
run;

*proc sort by x y ;
proc sort data = f;
by x y ;
run;

proc sort data = b;
by x y ;
run;

*merge ;
data final;
merge b f(drop = percent);
by x y;
run;

*use transpose 使用装置过程 可以更直观计数结果;
proc transpose data = final out = t;
by x;
id y;
var count;
run;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值