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
如何我可以這樣做嗎?
我的數據集具有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
如何我可以這樣做嗎?
我會將新值置於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;
非常感謝!讓我試試這個! –
爲什麼不使用一個簡單的if語句在datastep'如果SNP1 = 「AA」,那麼SNP1 = 「2」;如果SNP1 =「AG」,那麼SNP1 =「1」; ...?? snp有多少個不同的替換值,只有你提到的3個?如果是這樣,我會去簡單的方式,否則,如果你有許多不同的值應該被取代,我會建立一個宏的do循環自動化它... – kl78