|
|
板凳

楼主 |
发表于 2008-8-28 17:18:14
|
只看该作者
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呢?
敬请赐教!谢谢! |
|