2016-06-22 50 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

非常感謝!讓我試試這個! –