2016-06-22 13 views
0

My-Datensatz hat 3 SNPs, die wie unterWie ändern Sie die SNP-Werte?

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

In SNP1 sieht - Ich mag würde die Werte AA = 2, AG = 1, GG = 0 und Ebenso in SNP1 und SNP2

Wie ändern Darf ich das machen?

+0

Warum nicht eine einfache if-Anweisung in einem Datastep verwenden? If SNP1 = "AA" dann SNP1 = "2"; wenn SNP1 = "AG" dann SNP1 = "1"; ... '? Wie viele verschiedene Ersatzwerte können Sie haben, nur die 3, die Sie erwähnt haben? Wenn ja, würde ich das einfache wenn Weise gehen, andernfalls, wenn Sie viele verschiedene Werte haben, die ersetzt werden sollten, würde ich ein Makro mit einer do-Schleife bauen, um es zu automatisieren ... – kl78

Antwort

0

Ich würde die neuen Werte in eine proc format setzen, so dass Sie entweder die vorhandenen Werte beibehalten können, aber mit dem formatierten Wert angezeigt werden, oder konvertieren Sie die vorhandenen Werte im Format. Hier sind beide Möglichkeiten, dies zu tun.

/* 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

Vielen Dank! Lass es mich versuchen! –