SAS中文论坛
标题:
如何实现各个变量中的频数列表?
[打印本页]
作者:
shiyiming
时间:
2008-8-28 13:50
标题:
如何实现各个变量中的频数列表?
数据格式是这种样子的:
group a b c d
1 0 1 2 3
1 1 2 2 3
1 2 1 1 0
....
2 1 2 0 2
2 2 1 3 1
.....
3 2 1 1 3
3 1 2 2 3
请问如何对各个变量(a、b、c、d,实际中的变量可能有几万甚至更多,不可能一一列出来的)的0、1、2、3分别计数,并且生成在一个表格里面?proc freq可以生成,但是只能是一个变量一个变量的列出来,我想要一个最干净的结果。
不知道那位高人愿意指点一二,谢谢了先!
我想要的结果是这样子的:
group=1
变量 0 1 2 3
a 1 1 1 0
b 2 1 0 0
c.....
d.....
group=2
a....
b....
c....
d....
...
group=3
.....
作者:
shiyiming
时间:
2008-8-28 14:33
标题:
Re: 如何实现各个变量中的频数列表?
变量值是有规律的 1,2,3,4,5 ,6 ,........
或者是可得到的 那么写个宏 简单一些
你写的数据不全不知道是不是按变量值的不同求包不同变量值的记录条数
如果是那么简单
作者:
shiyiming
时间:
2008-8-28 17:18
标题:
Re: 如何实现各个变量中的频数列表?
我的数据一部分是这样子的:
SNP_ID group SNP_1780483 SNP_1780745 SNP_1780762 SNP_1780896 SNP_1780902
1 1 22 11 11 22 22
10 1 12 12 11 12 22
11 1 12 22 11 12 22
12 1 12 12 11 12 22
13 1 12 22 11 12 22
14 1 12 11 11 12 22
15 1 11 11 11 11 22
16 1 22 11 11 22 22
17 1 12 12 11 22 22
18 1 12 11 11 22 22
45 2 11 22 11 11 12
46 2 11 12 11 12 22
47 2 11 22 12 11 12
48 2 11 12 11 22 12
49 2 11 12 11 11 11
5 1 22 12 11 22 22
50 2 11 12 11 12 12
51 2 11 12 11 12 11
52 3 11 12 11 22 22
53 3 11 12 11 12 22
54 3 11 12 11 12 22
55 3 11 11 11 12 22
56 3 11 12 11 12 22
57 3 11 12 11 12 22
58 3 11 22 11 12 22
这是SNP的数据,第一列是样本的id,第二列是分组,后面是需要处理的变量,认为11、12、22都是字符型的变量。我想求各个SNP放入的基因频率。思路是这样的:首先计算每一列(也就是每个SNP)的几种变量值(基因型)的个数,然后根据每个SNP基因型的计数来计算基因频率。基因频率的计算公式是:f1=(x1+0.5*x2)/freq, f2=(x3+0.5*x2)/freq;x1表示11的个数,x2表示12的个数,x3表示13的个数。
组别可以不管他,一次算一个组,但是snp太多,不可能一个一个的列。
我可以对一列操作,计算出来一个snp的基因频率,但是怎么实现所有的有困难。我写的单个snp的程序是这样的:
data b;
set a;
x1=count(SNP_1780483,'1'1);
x2=count(SNP_1780483,'12');
x3=count(SNP_1780483,'22');
run;
proc means data=b sum;
var x1 x2 x3;
output out=allele sum=;
run;
data allele;
set allele;
f1=(x1+0.5*x2)/_freq_;
f2=(x3+0.5*x2)/_freq_;
run;
还有就是直接用proc freq来实现。
如何实现大规模的SNP呢?
敬请赐教!谢谢!
作者:
shiyiming
时间:
2008-8-28 22:11
标题:
Re: 如何实现各个变量中的频数列表?
不知道你数据量多大,如果大的话建议还是用宏。
现帮你写了段不是宏的,不是很高效,你先去试试。
宏的不写了,我想大家肯定都会写。 <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
[code:mavz22uy]
proc sort data=a out=b;
by snp_id group;
run;
proc transpose data=b out=b;
by snp_id group;
var snp_1780483--snp_1780902;
run;
proc freq data=b noprint;
tables group*_name_*col1 /out=b(drop=percent) sparse;
run;
data result(drop=count);
set b(rename=(count=x3));
by group _name_ col1;
x2=lag(x3);
x1=lag2(x3);
if last._name_ then do;
freq=x1+x2+x3;
f1=(x1+0.5*x2)/freq;
f2=(x3+0.5*x2)/freq;
output;
end;
run;
[/code:mavz22uy]
作者:
shiyiming
时间:
2008-8-29 11:33
标题:
Re: 如何实现各个变量中的频数列表?
非常感谢,已经实现了!
欢迎光临 SAS中文论坛 (https://mysas.net/forum/)
Powered by Discuz! X3.2