# Data步双output、双set的妙用

ML.ped的列数为ML.bim的2倍.

modi.txt是我修改的部分数据,通过这样的程序来实现:
data ML1;
set ML;
array geno{86} _all_;
if geno{1}=”A” then var7=1 ; else  var7=2;
if geno{2}=”A” then var8=1 ; else  var8=2;
if geno{3}=”T” then var9=1 ; else  var9=2;
if geno{4}=”T” then var10=1 ; else  var10=2;
.
.
.
run;

```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 语句”所用时间（总处理时间）:

CPU 时间 0.03 秒