Hi, @mkeintz. Thanks for the tips! I'm kinda new to the programming world and these kind of advices are really useful.
I've made the corrections you pointed out, but it still giving an error. Now it's related to the temporary function according to the log below.
I've extracted a random sample from my data (before sorting) and attached it to this reply to make it easier.
Thanks again for helping!
1 The SAS System 10:25 Wednesday, August 12, 2020
1 ;*';*";*/;quit;run;
2 OPTIONS PAGENO=MIN;
3 %LET SYSLAST=WORK.COOPERADO_ANOMES;
4 %LET _CLIENTTASKLABEL='Program';
5 %LET _CLIENTPROCESSFLOWNAME='Process Flow';
6 %LET
6 ! _CLIENTPROJECTPATH='\\10.200.12.26\gcl\ANÁLISES\2020\202008_Exploratória_Retenção_Cooperados\Retencao_Cooperados.egp';
7 %LET _CLIENTPROJECTPATHHOST='200SW12GTI140';
8 %LET _CLIENTPROJECTNAME='Retencao_Cooperados.egp';
9 %LET _SASPROGRAMFILE='';
10 %LET _SASPROGRAMFILEHOST='';
11
12 ODS _ALL_ CLOSE;
13 OPTIONS DEV=SVG;
14 GOPTIONS XPIXELS=0 YPIXELS=0;
15 %macro HTML5AccessibleGraphSupported;
16 %if %_SAS_VERCOMP(9, 4, 4) >= 0 %then ACCESSIBLE_GRAPH;
17 %mend;
18 FILENAME EGHTML TEMP;
19 ODS HTML5(ID=EGHTML) FILE=EGHTML
20 OPTIONS(BITMAP_MODE='INLINE')
21 %HTML5AccessibleGraphSupported
22 ENCODING='utf-8'
23 STYLE=HTMLBlue
24 NOGTITLE
25 NOGFOOTNOTE
26 GPATH=&sasworklocation
27 ;
NOTE: Writing HTML5(EGHTML) Body file: EGHTML
28
29 %*let beg_yyyyymm=201801; /* Erroneous initial code, commented out*/
30 %*let end_yyyyymm=202006; /* Erroneous initial code, commented out*/
31
32 %let beg_yyyymm=201901; /* Corrected replacement code*/
33 %let end_yyyymm=202007; /* Corrected replacement code*/
34
35 %let beg_yyyy=%substr(&beg_yyyymm,1,4);
36 %let end_yyyy=%substr(&end_yyyymm,1,4);
37 %let beg_mm=%substr(&beg_yyyymm,5,2);
38 %let end_mm=%substr(&end_yyyymm,5,2);
39
40 proc sort data=WORK.COOPERADO_ANOMES out=WORK.COOP_ANOMES_SORT;
41 by NUM_MAT NUM_ANO_MES;
42 run;
NOTE: There were 9039470 observations read from the data set WORK.COOPERADO_ANOMES.
NOTE: The data set WORK.COOP_ANOMES_SORT has 9039470 observations and 2 variables.
NOTE: PROCEDURE SORT used (Total process time):
real time 1.33 seconds
cpu time 3.36 seconds
43
44 data WORK.COOP_ANOMES_RETENCAO;
45 /* These arrays indexed by year (rows) and months (columns) */
46 array curcounts {&beg_yyyy:&end_yyyy,1:12} _temporary_ ();
_
22
2 The SAS System 10:25 Wednesday, August 12, 2020
ERROR 22-322: Syntax error, expecting one of the following: a quoted string, a numeric constant, a datetime constant,
a missing value.
47 array retained {&beg_yyyy:&end_yyyy,1:12} _temporary_ ();
WARNING: Partial value initialization of the array curcounts.
47 array retained {&beg_yyyy:&end_yyyy,1:12} _temporary_ ();
_
22
ERROR 22-322: Syntax error, expecting one of the following: a quoted string, a numeric constant, a datetime constant,
a missing value.
48 set WORK.COOP_ANOMES_SORT end=end_of_data;
WARNING: Partial value initialization of the array retained.
49
50 by NUM_MAT NUM_ANO_MES;
51 if last.NUM_ANO_MES; /* Let only one obs per id/yearmonth pass through */
52
53 /* First, get row and column array indexes for the current record */
54 _yyyy=floor(NUM_ANO_MES/100);
55 _mm=mod(NUM_ANO_MES,100);
56
57 curcounts{_yyyy,_mm}+1;
58
59 _curdate=mdy(_mm,1,_yyyy);
60 /* Now see about if this record is preceded by a record from the "retain" yearmonth */
61 if intck('month',lag(_curdate),_curdate)=1 and lag(NUM_MAT)=NUM_MAT then retained{_yyyy,_mm}+1;
62
63 if end_of_data;
64 do _yyyy=&beg_yyyy to &end_yyyy ;
65 do _mm=ifn(_yyyy=&beg_yyyy,&beg_mm,1) to ifn(_yyyy=&end_yyyy,&end_mm,12);
66 if curcounts{_yyyy,_mm}^=. then do;
67 NUM_ANO_MES=100*_yyyy+_mm;
68 distinctactivecustomer =curcounts{_yyyy,_mm};
69 retainedcustomers=retained{_yyyy,_mm};
70 output;
71 end;
72 end;
73 end;
74 run;
NOTE: The SAS System stopped processing this step because of errors.
WARNING: The data set WORK.COOP_ANOMES_RETENCAO may be incomplete. When this step was stopped there were 0 observations and 7
variables.
WARNING: Data set WORK.COOP_ANOMES_RETENCAO was not replaced because this step was stopped.
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
75
76 %LET _CLIENTTASKLABEL=;
77 %LET _CLIENTPROCESSFLOWNAME=;
78 %LET _CLIENTPROJECTPATH=;
79 %LET _CLIENTPROJECTPATHHOST=;
80 %LET _CLIENTPROJECTNAME=;
81 %LET _SASPROGRAMFILE=;
82 %LET _SASPROGRAMFILEHOST=;
83
3 The SAS System 10:25 Wednesday, August 12, 2020
84 ;*';*";*/;quit;run;
85 ODS _ALL_ CLOSE;
86
87
88 QUIT; RUN;
89
... View more