前两天在一个SAS QQ群上碰到一个处理数据实际问题,觉得挺有意思的,分享给大家。
问题:“sxlion: 你好!
array geno{86} _all_;
if geno{2}=”A” then var8=1 ; else var8=2;
if geno{4}=”T” then var10=1 ; else var10=2;
data mlped;
input var1 :$5. var2 :$5. (var3-var92) (~$1.) ;
cards;
H1000 H1000 0 0 1 2 A G T C T C G A T C C T T A C T T C T C G A A G T C C T C G A C T C C A A … G
H1003 H1003 0 0 1 2 A G T T T C G G 0 0 0 0 0 0 0 0 C C T T 0 0 G G 0 0 C C G G A A T T C C T… C
…/*将ML.ped数据复制过来*/
H1004 H1004 0 0 1 2 A G T C T C G A T C C T T A C T T C T C G A A G T C C T C G A C T C C A C … C G
;
run;
data mlbim;
input a $4.@@; output; output; /*双output构建新的查询数据*/
if _N_ = 43 then stop;
cards;
A T T G T C T C T T G A T C C A T C A A A G G G G T C C T A G C C C G C C G A T G T C
G C C A C T A T C C A G C T G C C A T G G A A A A C T T C G A T G G A T T A G C A G G
;
run;
data modi;
set mlped;
array geno[86] var7-var92;
array newgeno[86] nvar7-nvar92;
do i= 1 to 86 ;
set mlbim point=i; /*双set ,使用point定位查询数据集ml.bim */
if geno[i]=a then newgeno[i]=1 ;else newgeno[i]=2;
end;
output;
run;
proc print data=modi;
var nvar7-nvar92;
run;
运行结果:
NOTE: 从数据集 WORK.MLPED. 读取了 2020 个观测
NOTE: 数据集 WORK.MODI 有 2020 个观测和 179 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.04 秒
CPU 时间 0.03 秒
运行结果非常快,结果与给的参考结果modi.txt一致,Bingo!