楼主: yumenderen
3264 3

[问答] 关于sas自动生成excel含多个工作表 [推广有奖]

  • 1关注
  • 2粉丝

讲师

7%

还不是VIP/贵宾

-

威望
0
论坛币
150 个
通用积分
0
学术水平
2 点
热心指数
2 点
信用等级
2 点
经验
6843 点
帖子
291
精华
0
在线时间
475 小时
注册时间
2007-12-28
最后登录
2021-5-23

楼主
yumenderen 发表于 2018-2-28 09:49:00 |AI写论文
10论坛币
原数据表是这样
comcode

articlecode

fenduan

3201

PP01

e:150%+

3202

PP06

a:0-50%
期望通过sas自动生成这样:
行标签a:0-50%b:50%-90%c:90%-110%d:110%-150%e:150%+
3201

67.18%

10.22%

6.85%

2.54%

13.21%

PP01

46.15%

3.85%

26.92%

3.85%

19.23%

PP02

100.00%

0.00%

0.00%

0.00%

0.00%

PP03

80.00%

10.00%

0.00%

10.00%

0.00%

想生成一张工作表里全是3201的数据,第二张工作表是3202的数据,依次类推

附上程序
ods results off;
ods listing close;
options missing=0;

%macro pro;
%do i=3201 %to 3213;
ods tagsets.excelxp file="C:\Users\Administrator\Desktop\piancha.xls" style=minimal
options(sheet_interval='none' sheet_name="%i");
option missing=0;
proc tabulate data=finalwjmatchyj2 ;
var pianchalv ;
class comcode articlecode fenduan;
table (articlecode='' all),(rowpctn)*(fenduan='' )*n/printmiss;
where comcode=input("%i",$4.);
run;
ods html close;
%end;
%mend;

%pro;
ods tagsets.excelxp close;
ods listing;
ods results on;

但是报错说“没有解析宏 I 的调用”


实在搞不定,只好求教各位大神几个问题:
1、为什么“没有解析宏 I 的调用”,怎么解决呢?
2、数据集里面PP01,我想在excel里输出的是“企财”等。用format不会弄,或者怎么解决,不想更改数据集

最佳答案

xiami2000 查看完整内容

1. Change '%i' to '&i'. '%i' is to call macro; '&i' is to call macro variable. 2. proc format; value $ppformat 'PP01' = '企财' 'PP02' = '企财1' 'PP03' = '企财2' 'PP04' = '企财3' ; run; In PROC TUBULATE, add Format statement as: Format articlecode $ppformat.;
关键词:EXCEL 自动生成 xcel exce cel

沙发
xiami2000 在职认证  发表于 2018-2-28 09:49:01
1. Change '%i' to '&i'. '%i' is to call macro; '&i' is to call macro variable.
2. proc format;
value         $ppformat
         'PP01' = '企财'
         'PP02' = '企财1'
         'PP03' = '企财2'
         'PP04' = '企财3'
        ;
run;

In PROC TUBULATE, add Format statement as:
Format articlecode $ppformat.;

藤椅
yumenderen 发表于 2018-3-1 10:50:32
xiami2000 发表于 2018-3-1 00:19
1. Change '%i' to '&i'. '%i' is to call macro; '&i' is to call macro variable.
2. proc format;
va ...
非常感谢,原来是这里出了问题。
同时也发现了新的问题:
1是执行程序后只有最后3213的数据,看了日志3201/3202都有的,可能被最后覆盖了。所以或者是怎么调整“宏”和“循环”的嵌套关系?或者是让excel怎么实现“追加”而不是覆盖呢?
2我单步执行了
PROC FORMAT;
VALUE PPFORMAT
'PP01'='企财';
RUN;
提示:带引号的字符串“PP01”对于数值的输出格式和输入格式都是不可接受的。
怎么解决呢

板凳
yumenderen 发表于 2018-3-9 15:53:20
自己回复记录下:
之所以覆盖,是因为每次都重新引用了piancha.xls,将其移至循环之前即可;
ppfromat前加$就OK了

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

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