楼主: 陶然
2425 12

求助sas 循环:只想把 %excelexp(code=00000i.SZ) 跑1000次 [推广有奖]

  • 1关注
  • 3粉丝

已卖:6份资源

讲师

82%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
7.5000
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
3315 点
帖子
186
精华
0
在线时间
1002 小时
注册时间
2005-9-11
最后登录
2025-5-6

楼主
陶然 发表于 2013-8-19 16:09:11 |AI写论文
2论坛币
我%macro excelexp(code);
    ...
   %mend excelexp;已经完成了,
用 %excelexp(code=000001.SZ) 运行了也可以;我只想把%excelexp(code=000001.SZ)运行2000次,并且每次只改变“000001.SZ”(由000001.SZ-002000.SZ),我以为只要编写
do i=1 to 10;
%excelexp(code=00000i.SZ);
end;
可是不行,哪位大牛能够指点一下吗?万分感谢!

易丹 2013-06-19

关键词:EXCEL xcel code exce cel

沙发
rickyking 发表于 2013-8-19 16:09:12
陶然 发表于 2013-8-19 16:13
补充一句,我发现有两个需要解决的问题:1.编写调用宏的循环;2.由于在宏函数里面的变量实际是字符型的(e. ...
  1. %macro excelexp(code);
  2.     %put &code;
  3. %mend excelexp;

  4. %macro exec(i);
  5. %do j=1 %to &i;
  6. %let mycode=%sysfunc(putn(%sysfunc(inputn(&j,4.)),z6.)).SZ;
  7. %excelexp(code=&mycode);
  8. %end;
  9. %mend exec;

  10. %exec(i=2000);
复制代码

藤椅
陶然 发表于 2013-8-19 16:13:35
补充一句,我发现有两个需要解决的问题:1.编写调用宏的循环;2.由于在宏函数里面的变量实际是字符型的(e.g.000001),如何把i=1——>000001,也需要我思考

板凳
rickyking 发表于 2013-8-19 21:36:42
  1. %macro excelexp(code);
  2.     %put &code;
  3. %mend excelexp;

  4. %macro exec(i);
  5. %do j=1 %to &i;
  6. %let mycode=%sysfunc(putn(%sysfunc(inputn(&j,4.)),z6.)).SZ;
  7. %excelexp(code=&mycode);
  8. %end;
  9. %mend exec;

  10. %exec(i=2000);
复制代码

报纸
陶然 发表于 2013-8-20 10:30:33
rickyking 发表于 2013-8-19 16:09
我尝试了这个代码,跑得通,谢谢!
请允许我追问一个问题:我要处理的问题是循环导入excel文件,但是有一些编号是缺失的,例如:000001.SZ, 000002.SZ, 000004.SZ, 000005.SZ, 000006.SZ...有没有办法不导入那些不存在的excel呢?

地板
陶然 发表于 2013-8-20 10:40:55
rickyking 发表于 2013-8-19 21:36
并且看了,缺失的那些excel并无规律可循

7
小春1988 发表于 2013-8-21 18:33:26
先判断是否存在该excel文件

8
陶然 发表于 2013-8-22 11:38:40
小春1988 发表于 2013-8-21 18:33
先判断是否存在该excel文件
请问一下,应该如何先判断是否存在该excel呢?

9
陶然 发表于 2013-8-22 11:48:16
rickyking 发表于 2013-8-19 21:36
请教一下,可以实现读入数据库的最后50条数据吗?
嗯,我知道读取前50条数据的命令是:
data datanew;
set data(firstobs=1 obs=50);
run;

10
rickyking 发表于 2013-8-22 17:05:01
陶然 发表于 2013-8-22 11:48
请教一下,可以实现读入数据库的最后50条数据吗?
嗯,我知道读取前50条数据的命令是:
data datanew;
...
  1. data t;
  2.   input x;
  3. datalines;
  4. 1
  5. 2
  6. 3
  7. 4
  8. ;

  9. %let dsid=%sysfunc(open(t));
  10. %let num=%sysfunc(attrn(&dsid,nlobs));
  11. %let rc=%sysfunc(close(&dsid));
  12. %let number = 2;

  13. data tt;
  14. set t (firstobs =  %eval(&num.-&number.+1));
  15. run;
复制代码

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 04:28