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;
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