SAS中文论坛

标题: 数据集观测的选择问题 [打印本页]

作者: shiyiming    时间: 2011-6-18 00:26
标题: 数据集观测的选择问题
有这样已存在的数据集(第一列是自动编号,第二列是观测值)
1  465
2  486
3  487
4  354
5  145
6  463
7  125
8  453
9  478
10 125
...  ...
我想创建一个数据集,有两个观测x,y.使得前面数据集的第一个观测赋值给x,第二个观测赋值给y,第三个观测赋值给x,第四个观测赋值给y,依次类推(即奇数观测赋值给x,偶数观测赋值给y)即得下面的数据集
x y
465 486
487 354
145 463
125 453
478 125
请高手指点,非常感谢!
作者: shiyiming    时间: 2011-6-18 09:22
标题: Re: 数据集观测的选择问题
你可以使用如下CODE,试试:

[code:b2yimgn3]
data aa;   
        input x $ 1-7;
        Y= input(scan(x,2,' '),best.);
cards;
1 465
2 486
3 487
4 354
5 145
6 463
7 125
8 453
9 478
10 125
;
run;

proc print;
run;

data bb (rename=(y=a))  cc(rename=(y=b));
   set aa;
   if      mod(_n_,2)=1 then output bb;
   else if mod(_n_,2)=0 then output cc;
run;

data bb;
   set bb;
   n=_n_;
run;

data cc;
        set cc;
        n=_n_;
run;


data dd(keep=a b);
   merge bb cc;
   by n;
run;


proc print data=dd;
run;


[/code:b2yimgn3]
作者: shiyiming    时间: 2011-6-18 12:56
标题: Re: 数据集观测的选择问题
非常感谢!
作者: shiyiming    时间: 2011-6-20 09:59
标题: Re: 数据集观测的选择问题
data b;
do i=1 to tot;
set a nobs=tot point=i;
if mod(a,2)  then x=b;else y=b;
if i=tot and mod(tot,2) then y=.;  /*假设有奇数行,则最后一个Y置为缺失*/
if mod(i,2)=0 or (i=tot and mod(tot,2)) then output; /*两个一组输出或者是有奇数行,则输出最后一行*/
end;
stop;
keep x y;
run;




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2