楼主: fyfzhdsfdx
4002 17

[原创博文] SAS中观测数的疑问,及程序改进 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

0%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
966 点
帖子
97
精华
0
在线时间
89 小时
注册时间
2012-8-22
最后登录
2016-9-24

楼主
fyfzhdsfdx 发表于 2012-10-9 14:58:42 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
求高手指点。对数据集处理时,想根据不同数据的观测说来读数据,程序如下:
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),十分感谢!!!
二维码

扫码加我 拉你入群

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

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

关键词:First Group FIRS Data keep 程序

回帖推荐

Imasasor 发表于2楼  查看完整内容

本帖被以下文库推荐

沙发
Imasasor 发表于 2012-10-9 16:29:38
  1. data a1;
  2. input bh1 sz1;
  3. cards;
  4. 5 13
  5. 7 12
  6. 8 11
  7. 4 3
  8. ;

  9. %macro repeat;
  10. data a;
  11. %do i=2 %to 1 %by -1;
  12. set a1(keep=bh1 firstobs=&i obs=%eval(&i+2));
  13. col&i=bh1;
  14. keep col&i;
  15. %end;
  16. run;
  17. %mend;
  18. %repeat
复制代码
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

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

板凳
bobguy 发表于 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;

报纸
pobel 在职认证  发表于 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;
和谐拯救危机

地板
Imasasor 发表于 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个,你长度是多少,这里面就改为多少
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

7
fyfzhdsfdx 发表于 2012-10-11 14:15:02
Imasasor 发表于 2012-10-10 09:40
%eval(&i+2), 里面的2指的是你截取多少观测,2表示截取3个,你长度是多少,这里面就改为多少
哦,恍然大悟,之前没反应过来,十分感谢!再问一下哈,嘿嘿。。。如果不知道数据集的观测数n为多少怎么办?我知道最笨的方法是对于30个数据集做一下means过程,然后自己计算确定%eval(&i+m)中的m=n+i-6。有简单方法吗?再次感谢!

8
Imasasor 发表于 2012-10-11 14:35:10
fyfzhdsfdx 发表于 2012-10-11 14:15
哦,恍然大悟,之前没反应过来,十分感谢!再问一下哈,嘿嘿。。。如果不知道数据集的观测数n为多少怎么办 ...
data a1;
input bh1 sz1;
cards;
5 13
7 12
8 11
4 3
5 13
7 12
8 11
4 3
;

%macro repeat(data=);
proc sql;
select count(*) into:n from &data; /*获取数据集的观测数,并赋值给宏变量&n*/
quit;
data a;
%do i=6 %to 1 %by -1;
set &data(keep=bh1 firstobs=&i obs=%eval(&n+&i-6));
col&i=bh1;
keep col&i;
%end;
run;
%mend;
%repeat(data=a1) /*对于数据集a1操作,30个数据集只需将a1不断更改即可*/
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

9
fyfzhdsfdx 发表于 2012-10-11 15:09:52
pobel 发表于 2012-10-10 07:46
data name;
   set sashelp.class end=last;
   keep name;
谢谢,看来我要好好的学习一下数组和宏。不过这个程序会丢掉class数据集的第一个观测值,我把内循环改成do j=0 to 5;name(j+1)=col(i+j);但是无论改还是不改,程序都会出现警告,如下:
WARNING: 输入数据集为变量“col1”指定了多个长度。这可能会造成数据截断。
。。。。。。。
WARNING: 输入数据集为变量“col19”指定了多个长度。这可能会造成数据截断。
能改进吗?谢谢!

10
fyfzhdsfdx 发表于 2012-10-11 15:12:57
bobguy 发表于 2012-10-10 06:42
Using the point access it would be simple in logic and no macro is necessary.

data out1_d;
Thangk you very.I will study array to make up my shortage.

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 16:55