按长度分页和分组 sas proc 报告
page break by length and group sas proc report
我想创建一个分页值,它可以帮助我在使用 proc 报告时分页。
现在我的数据是这样的:
组值
一个 1
一个2
一个 3
...
b 1
b 2
...
c 1
c 2
c 3
并且假设我只希望每页 两行,并且如果组更改则中断。
所以我需要这样的数据集:
组值页面
1 1
一个 2 1
一个 3 2
...
b 1 3
b 2 3
...
c 1 4
c 2 4
c 3 5
谁能帮我解决这个问题?谢谢!
- 保留跨行保留值。创建可用于跟踪每组记录数的计数器值。这允许您将其拆分为 N 个数量的页面。
- 在每组开始时使用 BY 和 FIRST 重置计数器
- 检查是否需要增加页面
data have;
input Group $ Value;
cards;
a 1
a 2
a 3
b 1
b 2
c 1
c 2
c 3
;;;;
data want;
set have;
by group;
retain counter page;
if first.group then counter=0;
counter+1;
if mod(counter, 2) =1 or first.group then page+1;
run;
proc print data=want;
run;
结果:
Obs Group Value counter page
1 a 1 1 1
2 a 2 2 1
3 a 3 3 2
4 b 1 1 3
5 b 2 2 3
6 c 1 1 4
7 c 2 2 4
8 c 3 3 5
我想创建一个分页值,它可以帮助我在使用 proc 报告时分页。
现在我的数据是这样的:
组值
一个 1
一个2
一个 3
...
b 1
b 2
...
c 1
c 2
c 3
并且假设我只希望每页 两行,并且如果组更改则中断。 所以我需要这样的数据集:
组值页面
1 1
一个 2 1
一个 3 2
...
b 1 3
b 2 3
...
c 1 4
c 2 4
c 3 5
谁能帮我解决这个问题?谢谢!
- 保留跨行保留值。创建可用于跟踪每组记录数的计数器值。这允许您将其拆分为 N 个数量的页面。
- 在每组开始时使用 BY 和 FIRST 重置计数器
- 检查是否需要增加页面
data have;
input Group $ Value;
cards;
a 1
a 2
a 3
b 1
b 2
c 1
c 2
c 3
;;;;
data want;
set have;
by group;
retain counter page;
if first.group then counter=0;
counter+1;
if mod(counter, 2) =1 or first.group then page+1;
run;
proc print data=want;
run;
结果:
Obs Group Value counter page
1 a 1 1 1
2 a 2 2 1
3 a 3 3 2
4 b 1 1 3
5 b 2 2 3
6 c 1 1 4
7 c 2 2 4
8 c 3 3 5