SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 980|回复: 4
打印 上一主题 下一主题

如何实现各个变量中的频数列表?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-8-28 13:50:23 | 只看该作者

如何实现各个变量中的频数列表?

数据格式是这种样子的:
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
.....
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-8-28 14:33:30 | 只看该作者

Re: 如何实现各个变量中的频数列表?

变量值是有规律的 1,2,3,4,5 ,6 ,........
或者是可得到的 那么写个宏 简单一些
你写的数据不全不知道是不是按变量值的不同求包不同变量值的记录条数
如果是那么简单
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 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呢?
敬请赐教!谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2008-8-28 22:11:20 | 只看该作者

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&#46;_name_ then do;
                freq=x1+x2+x3;
                f1=(x1+0&#46;5*x2)/freq;
                f2=(x3+0&#46;5*x2)/freq;
                output;
        end;
run;
[/code:mavz22uy]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2008-8-29 11:33:37 | 只看该作者

Re: 如何实现各个变量中的频数列表?

非常感谢,已经实现了!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-4 23:30 , Processed in 0.069199 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表