I have a pdf report like below:
.......
column CPN VINT State Var1 Var2
define CPN / order;
define VINT / order descending;
define State / order;
define Var1 /sum;
define Var2 /sum;
........
In the final report,
CPN only show up once for each CPN group (CPN1 X All VINT X All State).
I want CPN show up every time for each VINT not once.
How can I do it?
Thanks.
Jian
Hi Jian,
Here is an example (tested only with listing output, though):
data test;
input CPN VINT State $ Var1 Var2;
cards;
1 5 FL 1 11
1 8 DE 2 22
1 8 AK 3 33
1 5 MI 4 44
2 7 TX 5 55
2 4 NC 6 66
2 7 GA 7 77
;
/* Before */
proc report data=test nowd;
column CPN VINT State Var1 Var2;
define CPN / order;
define VINT / order descending;
define State / order;
define Var1 / sum;
define Var2 / sum;
run;
/* After */
proc report data=test nowd;
column CPN CPN_ VINT State Var1 Var2;
define CPN / order noprint;
define CPN_ / computed ' CPN';
define VINT / order descending;
define State / order;
define Var1 / sum;
define Var2 / sum;
compute before CPN;
temp=CPN; /* Temporary variable TEMP is assigned the */
endcomp; /* value of CPN when it is available. */
compute before VINT;
temp2=VINT; /* Temporary variable TEMP2 is assigned the */
endcomp; /* value of VINT when it is available. */
compute CPN_ / character length=9;
if temp2 ne lag(temp2) then CPN_=put(temp,9.);
endcomp;
run;
This is partially based on Carpenter's Complete Guide to the SAS® REPORT Procedure, p. 185 f., where they repeat the value on each row. I introduced the LAG function to restrict the repetitions to the first observation of each VINT group. Maybe there is a more elegant way to accomplish this.
Hi Jian,
Here is an example (tested only with listing output, though):
data test;
input CPN VINT State $ Var1 Var2;
cards;
1 5 FL 1 11
1 8 DE 2 22
1 8 AK 3 33
1 5 MI 4 44
2 7 TX 5 55
2 4 NC 6 66
2 7 GA 7 77
;
/* Before */
proc report data=test nowd;
column CPN VINT State Var1 Var2;
define CPN / order;
define VINT / order descending;
define State / order;
define Var1 / sum;
define Var2 / sum;
run;
/* After */
proc report data=test nowd;
column CPN CPN_ VINT State Var1 Var2;
define CPN / order noprint;
define CPN_ / computed ' CPN';
define VINT / order descending;
define State / order;
define Var1 / sum;
define Var2 / sum;
compute before CPN;
temp=CPN; /* Temporary variable TEMP is assigned the */
endcomp; /* value of CPN when it is available. */
compute before VINT;
temp2=VINT; /* Temporary variable TEMP2 is assigned the */
endcomp; /* value of VINT when it is available. */
compute CPN_ / character length=9;
if temp2 ne lag(temp2) then CPN_=put(temp,9.);
endcomp;
run;
This is partially based on Carpenter's Complete Guide to the SAS® REPORT Procedure, p. 185 f., where they repeat the value on each row. I introduced the LAG function to restrict the repetitions to the first observation of each VINT group. Maybe there is a more elegant way to accomplish this.
Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.