全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3925 17
2012-10-09
求高手指点。对数据集处理时,想根据不同数据的观测说来读数据,程序如下:
data groupp1;
set out1_d(firstobs=6 obs=189);col6=_col6;
set out1_d(firstobs=5 obs=188);col5=_col6;
set out1_d(firstobs=4 obs=187);col4=_col6;
set out1_d(firstobs=3 obs=186);col3=_col6;
set out1_d(firstobs=2 obs=185);col2=_col6;
set out1_d(firstobs=1 obs=184);col1=_col6;
run;
data groupp1;set groupp1(keep=col6 col5 col4 col3 col2 col1);run;
但是有处理类似这样的30个数据集,故需重复上述程序30次,想知道一个简单的方法?本来想建个宏,可是不同的数据集out有不同的观测数,请问sas中有没有一个量是表示观测数的,这样建宏应该可以啦?或者其他方法?
对于上述程序,请教高手有没有改进的方法,目的是把数据集out1_d的观测值x1-xn拆分为6列,第一列为x6-xn,第二列为x5-x(n-1),。。。,第6列为x1-x(n-5),十分感谢!!!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-10-9 16:29:38
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-9 21:21:58
Imasasor 发表于 2012-10-9 16:29
十分感谢,程序达到了目的。假如数据的观测数为200个,firstobs=&i obs=%eval(&i+2));
这样不对吧?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-10 06:42:20
Using the point access it would be simple in logic and no macro is necessary.

data out1_d;
   do i=1 to 200;
     _col6=i;
         output;
   end;
   drop i;
run;
     
%let n=184;
data groupp2;
  do i=1 to &n;
      k=0;
      do j=0 to 5;
            k=i+j;
        set out1_d point=k;            
                array col[*] col1-col6;
                col[j+1]=_col6;
          end;
          output;
        end;
stop;
keep col1-col6;
run;

proc print;run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-10 07:46:13
data name;
   set sashelp.class end=last;
   keep name;
   if last then call symputx("nobs",_n_);
run;

proc transpose data=name out=name1;
   var name;
run;

data name2;
    array name(6) $;
        array col(&nobs) $ col1-col&nobs;
        set name1;
    do i=1 to &nobs-6;
            do j=1 to 6;
                   name(j)=col(i+j);
                end;
                   output;
        end;
        keep name:;
        stop;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-10 09:40:14
fyfzhdsfdx 发表于 2012-10-9 21:21
十分感谢,程序达到了目的。假如数据的观测数为200个,firstobs=&i obs=%eval(&i+2));
这样不对吧?
%eval(&i+2), 里面的2指的是你截取多少观测,2表示截取3个,你长度是多少,这里面就改为多少
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群