2016-06-22 51 views
0

我的数据集具有3个SNP,它看起来像下面如何修改SNP值?

Id SNP1 SNP 2 SNP3 
1 AA AA AA 
2 AG AC AG 
3 GG CC GG 
4  
5 
6 So on 

在SNP1 - 我想修改值AA = 2,AG = 1,GG = 0和同样地在SNP1和SNP2

如何我可以这样做吗?

+0

为什么不使用一个简单的if语句在datastep'如果SNP1 = “AA”,那么SNP1 = “2”;如果SNP1 =“AG”,那么SNP1 =“1”; ...?? snp有多少个不同的替换值,只有你提到的3个?如果是这样,我会去简单的方式,否则,如果你有许多不同的值应该被取代,我会建立一个宏的do循环自动化它... – kl78

回答

0

我会将新值置于proc format,以便您可以保留现有的值,但显示格式化的值,或使用格式转换现有的值。这是两种方法来做到这一点。

/* create format */ 
proc format; 
    value $snpfmt 'AA' = '2' 
        'AG' = '1' 
        'GG' = '0' 
; 
run; 

/* create initial dataset */ 
data have; 
input Id SNP1 $ SNP2 $ SNP3 $; 
datalines; 
1 AA AA AA 
2 AG AC AG 
3 GG CC GG 
; 

/* option1 - format the values */ 
proc datasets lib=work nodetails nolist; 
modify have; 
format snp1 snp2 snp3 $snpfmt2. ; 
quit; 

/* option2 - change the values using the format */ 
data want; 
set have; 
snp1 = put(snp1,$snpfmt2.); 
snp2 = put(snp2,$snpfmt2.); 
snp3 = put(snp3,$snpfmt2.); 
run; 
+0

非常感谢!让我试试这个! –