楼主: gxa1
3560 11

[原创博文] 移动式提取数据集中20个数据作为新的数据集!怎么做? [推广有奖]

  • 2关注
  • 0粉丝

副教授

46%

还不是VIP/贵宾

-

威望
0
论坛币
416 个
通用积分
8.5500
学术水平
3 点
热心指数
5 点
信用等级
3 点
经验
38068 点
帖子
359
精华
0
在线时间
1313 小时
注册时间
2009-3-27
最后登录
2024-5-19

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
一个数据集,有100只股票,每只股票有不同的交易时间,现在需要把每只股票的1~20个数据提出作为新数据集;2~21数据提出作为新数据集;……直到该股票数据结束。
附件是只有2只股票的数据集,望高手指点!!

test.xls (29.5 KB)
二维码

扫码加我 拉你入群

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

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

关键词:数据集 怎么做 高手指点 股票数据 交易时间

未命名.jpg (95.74 KB)

未命名.jpg

回帖推荐

meishanjia1900 发表于3楼  查看完整内容

要用宏,且在嵌套到宏过程1中的DATA步中加入类似如下的语句: data 新数据文件名 set 主数据文件名 if _n_ >= &宏变量名 and _n_

本帖被以下文库推荐

沙发
FFL翻白眼死撑鱼 在职认证  发表于 2011-10-10 11:17:41 |只看作者 |坛友微信交流群
同求问 1~20  2~21 3~22 这样的有没有高人指点 谢谢

使用道具

藤椅
meishanjia1900 发表于 2011-10-10 17:49:07 |只看作者 |坛友微信交流群
要用宏,且在嵌套到宏过程1中的DATA步中加入类似如下的语句:

data 新数据文件名
set 主数据文件名
if _n_ >= &宏变量名 and _n_ <= &宏变量名+20

之后,在将该宏过程1嵌套到更大的宏过程2中,过程2负责循环,每次依一定规律改变“新数据文件名”并将“&宏变量”每次加1,如此循环运行过程1
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

使用道具

板凳
YueweiLiu 发表于 2011-10-10 18:55:21 |只看作者 |坛友微信交流群
meishanjia1900 发表于 2011-10-10 17:49
要用宏,且在嵌套到宏过程1中的DATA步中加入类似如下的语句:

data 新数据文件名
光说不练哪。。 呵呵,玩笑。
  1. proc import datafile="d:\sas\test.xls" dbms=excel2000 replace out=test;
  2. run;

  3. data _null_;
  4.         set test;
  5.         by stkcd notsorted;
  6.         if first.stkcd then num=0;
  7.         num+1;
  8.         if last.stkcd then do;
  9.                 if num>=20 then do i=1 to num-19 by 1;
  10.                         call execute (" data stkcd_"||strip(stkcd)||"_"||strip(put(i,best.))||"_"||strip(put(i+19,best.))||";set test;if "||strip(put(i,best.))||"<=_n_<="||strip(put(i,best.))||"+19;run;");
  11.                 end;
  12.         end;
  13. run;
复制代码

已有 2 人评分学术水平 热心指数 信用等级 收起 理由
gxa1 + 1 + 1 + 1 热心帮助其他会员
yugao1986 + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

使用道具

报纸
YueweiLiu 发表于 2011-10-10 18:57:56 |只看作者 |坛友微信交流群
上面的程序小心运行啊,最好先用你的测试数据来测试一下,否则如果数据量大的话,会一下子生成好多数据集。

使用道具

地板
meishanjia1900 发表于 2011-10-10 20:27:46 |只看作者 |坛友微信交流群
YueweiLiu 发表于 2011-10-10 18:55
光说不练哪。。 呵呵,玩笑。
强人,居然还可以这样编,佩服。

我还以为一定要用宏呢,原来还有execute这样方便的东西。

你看的是那本书?拜托推荐一下。

使用道具

7
YueweiLiu 发表于 2011-10-10 20:34:57 |只看作者 |坛友微信交流群
meishanjia1900 发表于 2011-10-10 20:27
强人,居然还可以这样编,佩服。

我还以为一定要用宏呢,原来还有execute这样方便的东西。
这个 call route 到处都可以看到。比如 the little sas book, sashelp 等。

使用道具

8
yugao1986 发表于 2011-10-10 21:32:43 |只看作者 |坛友微信交流群
lz貌似要做rolling reg
三人行必有我师

使用道具

9
可~乐 发表于 2011-10-10 21:59:59 |只看作者 |坛友微信交流群
%let total=244;/*随便举个总数*/
%let size=20;/*这个是跨度*/
%macro aaa(datain=);
      %do i=1 %to %eval(&total.-&size.+1) %by 1;/*一次变动1个数据,只需改变步长就可以了*/
             data temp&i;
                   set &datain;
             run;
   %end;
%mend;
%aaa(datain=new);
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
gxa1 + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

10
可~乐 发表于 2011-10-10 22:02:41 |只看作者 |坛友微信交流群
额,编辑的时候漏了一点
%let total=244;/*随便举个总数*/
%let size=20;/*这个是跨度*/
%macro aaa(datain=);
      %do i=1 %to %eval(&total.-&size.+1) %by 1;/*一次变动1个数据,只需改变步长就可以了*/
             data temp&i;
                   set &datain;
                   if &i. <=_n_ <= %eval(&i.+&size.-1);
             run;
   %end;
%mend;
%aaa(datain=new);

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-20 01:26