楼主: rickto
3008 2

【求教】关于变量的引用和循环 [推广有奖]

  • 2关注
  • 0粉丝

本科生

69%

还不是VIP/贵宾

-

威望
0
论坛币
1202 个
通用积分
0
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
3536 点
帖子
49
精华
0
在线时间
156 小时
注册时间
2009-9-9
最后登录
2022-9-10

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
大家好,我想通过代码形式解决数据收集的问题。
首先,数据都是EXCEL表,都是以店铺名称的形式储存的,但是由于淘宝下载的数据字段过多,所以分成了4个文件,分别是店铺名+A,B,C,D的形式。
由于店铺后期也会有很多,所以想用循环来解决数据导入问题。
以下是测试代码。


%let spname=东讯旗舰店;                         /*定义执行的店铺名*/
%let sp=dx;                                                   /*定义店铺名英文缩写*/
%let pathwork=G:\生意参谋数据(店铺及商品)\;        /*定义文件储存地址*/
%let bname=ABCD;                             /*定义子文件编码不同的部分*/
%let rnum=4                                 /*定义循环执行次数*/

%macro scf1(px=);
proc import datafile ="&pathwork.&spname.&px." dbms =excel out=shop&px;
sheet="自助取数" ;
options validvarname =any;
getnames=yes;
quit;
%mend scf1;

%macro scf2;
%do i=1 %to %eval(&rnum.);
k=%substr(&bname.,i,1);
%scf1(px=k);
%end;
%mend scf2;

%scf2;

现在调试的问题:
3    %let spname=东讯旗舰店;                         /*定义执行的店铺名*/
4    %let sp=dx;                                                   /*定义店铺名英文缩写*/
5    %let pathwork=G:\生意参谋数据(店铺及商品)\;        /*定义文件储存地址*/
6    %let bname=ABCD;                             /*定义子文件编码不同的部分*/
7    %let rnum=4                                 /*定义循环执行次数*/
8
9    %macro scf1(px=);
ERROR: 检测到开型代码语句的递归。
10   proc import datafile ="&pathwork.&spname.&px." dbms =excel out=shop&px;
WARNING: 没有解析符号引用 PX。
WARNING: 没有解析符号引用 PX。
11   sheet="自助取数" ;
     -----
     180

ERROR 180-322: 语句无效或未按正确顺序使用。

12   options validvarname =any;
13   getnames=yes;
     --------
     180

ERROR 180-322: 语句无效或未按正确顺序使用。

ERROR: 该 %MEND 语句没有匹配的 %MACRO 语句。
14   quit;
15   %mend scf1;
16
17   %macro scf2;
18   %do i=1 %to %eval(&rnum.);
19   k=%substr(&bname.,i,1);
20   %scf1(px=k);
21   %end;
22   %mend scf2;
23
24   %scf2;
WARNING: 没有解析符号引用 PX。
WARNING: 没有解析符号引用 PX。
WARNING: 没有解析符号引用 PX。
WARNING: 没有解析符号引用 PX。
ERROR: 在需要数值操作数的 %EVAL 函数或 %IF 条件中发现字符操作数。
       条件是: 4 proc import datafile ="G:\生意参谋数据(店铺及商品)\东讯旗舰店&px." dbms =excel out=shop&px
ERROR: %EVAL 函数没有要求值的表达式,或 %IF 语句没有条件。
ERROR: %TO 值(%DO I 循环中)无效。
ERROR: 宏 SCF2 将终止执行。


好像错了一堆。求大神指点。


二维码

扫码加我 拉你入群

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

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

关键词:warning options import SUBSTR Option 淘宝下载 英文缩写 旗舰店 EXCEL 店铺

沙发
rickto 发表于 2015-10-14 16:56:00 |只看作者 |坛友微信交流群
额。各位见笑了。我又尝试了下把代码简化下,却发现还是有关开型代码错误的问题。还有那个i值无法引用的问题。

%let spname=东讯旗舰店;                         /*定义执行的店铺名*/
%let sp=dx;                                                   /*定义店铺名英文缩写*/
%let pathwork=G:\生意参谋数据(店铺及商品)\;        /*定义文件储存地址*/
%let bname=ABCD;                             /*定义子文件编码不同的部分*/
%let rnum=4                                 /*定义循环执行次数*/


%macro scf2;
%do i=A %to D;
proc import datafile ="&pathwork.&spname.&i" dbms =excel out=shop&i;
sheet="自助取数";
options validvarname =any;
getnames=yes;
%end;
%mend scf2;

%scf2;

初学SAS直接编程,大家见笑了。

使用道具

藤椅
teqel 发表于 2015-10-14 21:14:17 |只看作者 |坛友微信交流群
第一个问题:
%let k=%substr(&bname.,i,1);
%scf1(px=&k);
第二个问题,文件没有后缀名

使用道具

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

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

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

GMT+8, 2024-4-27 09:05