BookmarkSubscribeRSS Feed
charleenjm
Calcite | Level 5

Hello, I am trying to write a code to create a dummy variable for delivery admissions using an array for ICD10 codes and Procedure codes but I run into an error "Array subscript out of range at line 172 column 12. None." 

data scdny2016dx;
    set SCDNY2016;
    /* Initialize flags and variables */
    scdny2016dx = 0;  /* Sickle cell diagnosis flag */
    delivery_flag = 0;  /* Delivery diagnosis flag */
    dxpos = .;  /* Diagnosis position */
    
    /* Array for diagnosis codes */
    array dx_vars {*} I10_DX1-I10_DX25; 
    
    /* Array for procedure codes */
    array pr_vars {*} I10_PR1-I10PR10;  /* Adjust based on how procedure variables are named */
    
    /* Loop through diagnosis variables to check for sickle cell disease */
    do i = 1 to dim(dx_vars);
        if dx_vars[i] in ('D5700', 'D5701', 'D5702', 'D57211', 'D57212', 'D57219', 
                          'D57412', 'D57419', 'D57811', 'D57812', 'D57819', 
                          'D571', 'D5720', 'D5740', 'D5780', 'D57411') then do;
            scdny2016dx = 1;  /* Flag for sickle cell diagnosis */
            dxpos = i; 
            dx = dx_vars[i]; 
            output;  
            leave; 
        end;
    end;
    
    /* Loop through diagnosis codes to check for delivery diagnoses (ICD-10) */
    if dx_vars[i] in ('O60', 'O61', 'O62', 'O63', 'O64', 'O65', 'O66', 'O67', 
                      'O68', 'O69', 'O70', 'O71', 'O72', 'O73', 'O74', 'O75', 
                      'O76', 'O77', 'O78', 'O79', 'O80', 'O81', 'O82', 'Z73', 
                      'Z38') then do;
        delivery_flag = 1;  /* Flag for delivery diagnosis */
        output;  /* Output valid record */
    end;

    /* Loop through procedure codes to check for pregnancy-related deliveries */
    do j = 1 to dim(pr_vars);
        if pr_vars[j] in ('10D07Z3', '10D07Z4', '10D07Z5', '10D07Z6', '10D07Z7', 
                          '10D07Z8', '10D00Z0', '10D00Z1', '10D00Z2', '10E0XZZ', 
                          '0DQR0ZZ', '0HQ9XZZ', '0KQM0ZZ', '0W8NXZZ') then do;
            delivery_flag = 1;  /* Flag for delivery procedure code */
            output;  /* Output valid record */
        end;
    end;

    drop i j;  /* Drop the loop index variables */
run;

 

charleenjm_0-1753808372348.png

 

10 REPLIES 10
Kathryn_SAS
SAS Employee

Since the variables are character, you need to use $ in the ARRAY statement. Also Array pr_vars is missing an underscore.

/* Array for diagnosis codes */
    array dx_vars {*} $ I10_DX1-I10_DX25; 
    
    /* Array for procedure codes */
    array pr_vars {*}  $ I10_PR1-I10_PR10; 

 

FreelanceReinh
Jade | Level 19

Hello @charleenjm,

 


@charleenjm wrote:

... I run into an error "Array subscript out of range at line 172 column 12. ..."

This error message occurred because for at least one observation in dataset SCDNY2016 the IF condition in the loop checking for sickle cell disease was never met and hence the LEAVE statement was not executed. As a consequence, the DO loop was left with the end value plus 1  in variable i, that is i=dim(dx_vars)+1=26. Indeed, the log contains "i=26" (but it would be easier to find if you posted the log as text, not as a screenshot).

 

It appears that you forgot the DO-END statement in (what is announced to be) the "loop ... to check for delivery diagnoses", so that no loop is executed here and only the leftover value i from the previous DO loop is used. If that value is too large (as explained above), you get the error message when referring to dx_vars[i] in the next IF statement. Otherwise, the log might be clean, but the result is likely wrong.

 

The missing underscore, well spotted by @Kathryn_SAS, must have caused another error message (but you didn't post the entire log of the DATA step, so we don't see it), while the dollar signs in the array definitions are optional for existing character variables.

charleenjm
Calcite | Level 5

142  ods listing close;ods html5 (id=saspy_internal) file=stdout options(bitmap_mode='inline') device=svg style=HTMLBlue; ods

142! graphics on / outputfmt=png;

NOTE: Writing HTML5(SASPY_INTERNAL) Body file: STDOUT

143 

144  data scdny2016dx;

145      set SCDNY2016;

146      /* Initialize flags and variables */

147      scdny2016dx = 0;  /* Sickle cell diagnosis flag */

148      delivery_flag = 0;  /* Delivery diagnosis flag */

149      dxpos = .;  /* Diagnosis position */

150 

151      /* Array for diagnosis codes */

152      array dx_vars {*} I10_DX1-I10_DX25;

153 

154      /* Array for procedure codes */

155      array pr_vars {*} I10_PR1-I10_PR14;  /* Adjust based on how procedure variables are named */

156 

157      /* Loop through diagnosis variables to check for sickle cell disease */

158      do i = 1 to dim(dx_vars);

159          if dx_vars[i] in ('D5700', 'D5701', 'D5702', 'D57211', 'D57212', 'D57219',

160                            'D57412', 'D57419', 'D57811', 'D57812', 'D57819',

161                            'D571', 'D5720', 'D5740', 'D5780', 'D57411') then do;

162              scdny2016dx = 1;  /* Flag for sickle cell diagnosis */

163              dxpos = i;  /* Store diagnosis position */

164              dx = dx_vars[i];  /* Store diagnosis code */

165              output;  /* Output valid record */

166              leave;  /* Exit loop after first match */

167          end;

168      end;

169 

170      /* Loop through diagnosis codes to check for pregnancy diagnoses (ICD-10) */

171      /* This loop should no longer reference dx_vars[i] directly */

172          if dx_vars[i] in ('O60', 'O61', 'O62', 'O63', 'O64', 'O65', 'O66', 'O67',

173                        'O68', 'O69', 'O70', 'O71', 'O72', 'O73', 'O74', 'O75',

174                        'O76', 'O77', 'O78', 'O79', 'O80', 'O81', 'O82', 'Z73',

175                        'Z38') then do;

176          delivery_flag = 1;  /* Flag for delivery diagnosis */

177          output;  /* Output valid record */

178      end;

179 

180      /* Loop through procedure codes to check for pregnancy-related deliveries */

181      do j = 1 to dim(pr_vars);

182          if pr_vars[j] in ('10D07Z3', '10D07Z4', '10D07Z5', '10D07Z6', '10D07Z7',

183                            '10D07Z8', '10D00Z0', '10D00Z1', '10D00Z2', '10E0XZZ',

184                            '0DQR0ZZ', '0HQ9XZZ', '0KQM0ZZ', '0W8NXZZ') then do;

185              delivery_flag = 1;  /* Flag for delivery procedure code */

186              output;  /* Output valid record */

187          end;

188      end;

189 

190      drop i j;  /* Drop the loop index variables */

191  run;

ERROR: Array subscript out of range at line 172 column 12.

AGE=46 AGEDAY=. AGEMONTH=. AHOUR=0900 AMONTH=. ANESTH=20 ATYPE=1 AWEEKEND=0 BILLTYPE=0111 BLOOD=0 BWT=. DaysToEvent=. DHOUR=1500

DIED=0 DISP_X=01 DISPUB04=1 DISPUNIFORM=1 DMONTH=. DQTR=. DRG=974 DRG_NoPOA=974 DRGVER=33 DSHOSPID=0001 DXPOA1=Y DXPOA2=Y DXPOA3=Y

DXPOA4=Y DXPOA5=Y DXPOA6=Y DXPOA7=N DXPOA8=Y DXPOA9=N DXPOA10=Y DXPOA11=Y DXPOA12=Y DXPOA13=Y DXPOA14=Y DXPOA15=N DXPOA16=N

DXPOA17=N DXPOA18=Y DXPOA19=X DXPOA20=Y DXPOA21=Y DXPOA22=  DXPOA23=  DXPOA24=  DXPOA25=  DXVER=10 E_POA1=  E_POA2=  E_POA3=

E_POA4=  E_POA5=  E_POA6=  E_POA7=  E_POA8=  E_POA9=  FEMALE=0 HCUP_ED=1 HCUP_OS=0 HISPANIC=0 HISPANIC_X=2 Homeless=. HOSPST=NY

I10_DX_Admitting=B20 I10_DX1=B20 I10_DX2=J9601 I10_DX3=B59 I10_DX4=R6520 I10_DX5=N170 I10_DX6=A419 I10_DX7=E870 I10_DX8=N183

I10_DX9=K921 I10_DX10=B3781 I10_DX11=F329 I10_DX12=K219 I10_DX13=E785 I10_DX14=E860 I10_DX15=E222 I10_DX16=F4322 I10_DX17=E8342

I10_DX18=I129 I10_DX19=Z8572 I10_DX20=D509 I10_DX21=E872 I10_DX22=  I10_DX23=  I10_DX24=  I10_DX25=  I10_ECAUSE1=  I10_ECAUSE2=

I10_ECAUSE3=  I10_ECAUSE4=  I10_ECAUSE5=  I10_ECAUSE6=  I10_ECAUSE7=  I10_ECAUSE8=  I10_ECAUSE9=  I10_NDX=21 I10_NECAUSE=0 I10_NPR=4

I10_PR1=5A1945Z I10_PR2=0BH17EZ I10_PR3=0BBD8ZX I10_PR4=0B958ZX I10_PR5=  I10_PR6=  I10_PR7=  I10_PR8=  I10_PR9=  I10_PR10=

I10_PR11=  I10_PR12=  I10_PR13=  I10_PR14=  I10_PROCTYPE=1 KEY=362016100000001 LOS=40 LOS_X=40 MDC=25 MDC_NoPOA=25 MDNUM1_R=117363

MDNUM2_R=116572 MEDINCSTQ=. OS_TIME=0 PAY1=2 PAY1_X=17 PAY2=. PAY2_X=  PAY3=. PAY3_X=  PAYER1_X=211 PAYER2_X=  PL_CBSA=. PL_NCHS=.

PL_RUCC=. PL_UIC=. PL_UR_CAT4=. POA_Disch_Edit1=0 POA_Disch_Edit2=0 POA_Hosp_Edit1=0 POA_Hosp_Edit2=0 POA_Hosp_Edit3=0

POA_Hosp_Edit3_Value=0.01 PointOfOrigin_X=1 PointOfOriginUB04=1 PRDAY1=. PRDAY2=. PRDAY3=. PRDAY4=. PRDAY5=. PRDAY6=. PRDAY7=.

PRDAY8=. PRDAY9=. PRDAY10=. PRDAY11=. PRDAY12=. PRDAY13=. PRDAY14=. PRVER=10 PSTATE=NY PSTCO=. PSTCO2=. RACE=2 RACE_X=02

TOTCHG=356997 TOTCHG_X=356997 TRAN_IN=0 TRAN_OUT=0 VisitLink=. YEAR=2016 ZIP=  ZIP3=  ZIPINC_QRTL=. AYEAR=. BMONTH=. BYEAR=.

PRMONTH1=. PRMONTH2=. PRMONTH3=. PRMONTH4=. PRMONTH5=. PRMONTH6=. PRMONTH7=. PRMONTH8=. PRMONTH9=. PRMONTH10=. PRMONTH11=.

PRMONTH12=. PRMONTH13=. PRMONTH14=. PRYEAR1=. PRYEAR2=. PRYEAR3=. PRYEAR4=. PRYEAR5=. PRYEAR6=. PRYEAR7=. PRYEAR8=. PRYEAR9=.

PRYEAR10=. PRYEAR11=. PRYEAR12=. PRYEAR13=. PRYEAR14=. scdny2016dx=0 delivery_flag=0 dxpos=. i=26 dx=  j=. _ERROR_=1 _N_=1

NOTE: The SAS System stopped processing this step because of errors.

NOTE: There were 1 observations read from the data set WORK.SCDNY2016.

WARNING: The data set WORK.SCDNY2016DX may be incomplete.  When this step was stopped there were 0 observations and 212 variables.

WARNING: Data set WORK.SCDNY2016DX 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

     

192 

193  ods html5 (id=saspy_internal) close;ods listing;

 

ERROR: Array subscript out of range at line 172 column 12. None

 

charleenjm
Calcite | Level 5

Thank you. This was helpful. Here's the complete log: 

142  ods listing close;ods html5 (id=saspy_internal) file=stdout options(bitmap_mode='inline') device=svg style=HTMLBlue; ods
142! graphics on / outputfmt=png;
NOTE: Writing HTML5(SASPY_INTERNAL) Body file: STDOUT
143  
144  data scdny2016dx;
145      set SCDNY2016;
146      /* Initialize flags and variables */
147      scdny2016dx = 0;  /* Sickle cell diagnosis flag */
148      delivery_flag = 0;  /* Delivery diagnosis flag */
149      dxpos = .;  /* Diagnosis position */
150  
151      /* Array for diagnosis codes */
152      array dx_vars {*} I10_DX1-I10_DX25;
153  
154      /* Array for procedure codes */
155      array pr_vars {*} I10_PR1-I10_PR14;  /* Adjust based on how procedure variables are named */
156  
157      /* Loop through diagnosis variables to check for sickle cell disease */
158      do i = 1 to dim(dx_vars);
159          if dx_vars[i] in ('D5700', 'D5701', 'D5702', 'D57211', 'D57212', 'D57219',
160                            'D57412', 'D57419', 'D57811', 'D57812', 'D57819',
161                            'D571', 'D5720', 'D5740', 'D5780', 'D57411') then do;
162              scdny2016dx = 1;  /* Flag for sickle cell diagnosis */
163              dxpos = i;  /* Store diagnosis position */
164              dx = dx_vars[i];  /* Store diagnosis code */
165              output;  /* Output valid record */
166              leave;  /* Exit loop after first match */
167          end;
168      end;
169  
170      /* Loop through diagnosis codes to check for pregnancy diagnoses (ICD-10) */
171      /* This loop should no longer reference dx_vars[i] directly */
172          if dx_vars[i] in ('O60', 'O61', 'O62', 'O63', 'O64', 'O65', 'O66', 'O67',
173                        'O68', 'O69', 'O70', 'O71', 'O72', 'O73', 'O74', 'O75',
174                        'O76', 'O77', 'O78', 'O79', 'O80', 'O81', 'O82', 'Z73',
175                        'Z38') then do;
176          delivery_flag = 1;  /* Flag for delivery diagnosis */
177          output;  /* Output valid record */
178      end;
179  
180      /* Loop through procedure codes to check for pregnancy-related deliveries */
181      do j = 1 to dim(pr_vars);
182          if pr_vars[j] in ('10D07Z3', '10D07Z4', '10D07Z5', '10D07Z6', '10D07Z7',
183                            '10D07Z8', '10D00Z0', '10D00Z1', '10D00Z2', '10E0XZZ',
184                            '0DQR0ZZ', '0HQ9XZZ', '0KQM0ZZ', '0W8NXZZ') then do;
185              delivery_flag = 1;  /* Flag for delivery procedure code */
186              output;  /* Output valid record */
187          end;
188      end;
189  
190      drop i j;  /* Drop the loop index variables */
191  run;
ERROR: Array subscript out of range at line 172 column 12.
AGE=46 AGEDAY=. AGEMONTH=. AHOUR=0900 AMONTH=. ANESTH=20 ATYPE=1 AWEEKEND=0 BILLTYPE=0111 BLOOD=0 BWT=. DaysToEvent=. DHOUR=1500
DIED=0 DISP_X=01 DISPUB04=1 DISPUNIFORM=1 DMONTH=. DQTR=. DRG=974 DRG_NoPOA=974 DRGVER=33 DSHOSPID=0001 DXPOA1=Y DXPOA2=Y DXPOA3=Y
DXPOA4=Y DXPOA5=Y DXPOA6=Y DXPOA7=N DXPOA8=Y DXPOA9=N DXPOA10=Y DXPOA11=Y DXPOA12=Y DXPOA13=Y DXPOA14=Y DXPOA15=N DXPOA16=N
DXPOA17=N DXPOA18=Y DXPOA19=X DXPOA20=Y DXPOA21=Y DXPOA22=  DXPOA23=  DXPOA24=  DXPOA25=  DXVER=10 E_POA1=  E_POA2=  E_POA3= 
E_POA4=  E_POA5=  E_POA6=  E_POA7=  E_POA8=  E_POA9=  FEMALE=0 HCUP_ED=1 HCUP_OS=0 HISPANIC=0 HISPANIC_X=2 Homeless=. HOSPST=NY
I10_DX_Admitting=B20 I10_DX1=B20 I10_DX2=J9601 I10_DX3=B59 I10_DX4=R6520 I10_DX5=N170 I10_DX6=A419 I10_DX7=E870 I10_DX8=N183
I10_DX9=K921 I10_DX10=B3781 I10_DX11=F329 I10_DX12=K219 I10_DX13=E785 I10_DX14=E860 I10_DX15=E222 I10_DX16=F4322 I10_DX17=E8342
I10_DX18=I129 I10_DX19=Z8572 I10_DX20=D509 I10_DX21=E872 I10_DX22=  I10_DX23=  I10_DX24=  I10_DX25=  I10_ECAUSE1=  I10_ECAUSE2= 
I10_ECAUSE3=  I10_ECAUSE4=  I10_ECAUSE5=  I10_ECAUSE6=  I10_ECAUSE7=  I10_ECAUSE8=  I10_ECAUSE9=  I10_NDX=21 I10_NECAUSE=0 I10_NPR=4
I10_PR1=5A1945Z I10_PR2=0BH17EZ I10_PR3=0BBD8ZX I10_PR4=0B958ZX I10_PR5=  I10_PR6=  I10_PR7=  I10_PR8=  I10_PR9=  I10_PR10= 
I10_PR11=  I10_PR12=  I10_PR13=  I10_PR14=  I10_PROCTYPE=1 KEY=362016100000001 LOS=40 LOS_X=40 MDC=25 MDC_NoPOA=25 MDNUM1_R=117363
MDNUM2_R=116572 MEDINCSTQ=. OS_TIME=0 PAY1=2 PAY1_X=17 PAY2=. PAY2_X=  PAY3=. PAY3_X=  PAYER1_X=211 PAYER2_X=  PL_CBSA=. PL_NCHS=.
PL_RUCC=. PL_UIC=. PL_UR_CAT4=. POA_Disch_Edit1=0 POA_Disch_Edit2=0 POA_Hosp_Edit1=0 POA_Hosp_Edit2=0 POA_Hosp_Edit3=0
POA_Hosp_Edit3_Value=0.01 PointOfOrigin_X=1 PointOfOriginUB04=1 PRDAY1=. PRDAY2=. PRDAY3=. PRDAY4=. PRDAY5=. PRDAY6=. PRDAY7=.
PRDAY8=. PRDAY9=. PRDAY10=. PRDAY11=. PRDAY12=. PRDAY13=. PRDAY14=. PRVER=10 PSTATE=NY PSTCO=. PSTCO2=. RACE=2 RACE_X=02
TOTCHG=356997 TOTCHG_X=356997 TRAN_IN=0 TRAN_OUT=0 VisitLink=. YEAR=2016 ZIP=  ZIP3=  ZIPINC_QRTL=. AYEAR=. BMONTH=. BYEAR=.
PRMONTH1=. PRMONTH2=. PRMONTH3=. PRMONTH4=. PRMONTH5=. PRMONTH6=. PRMONTH7=. PRMONTH8=. PRMONTH9=. PRMONTH10=. PRMONTH11=.
PRMONTH12=. PRMONTH13=. PRMONTH14=. PRYEAR1=. PRYEAR2=. PRYEAR3=. PRYEAR4=. PRYEAR5=. PRYEAR6=. PRYEAR7=. PRYEAR8=. PRYEAR9=.
PRYEAR10=. PRYEAR11=. PRYEAR12=. PRYEAR13=. PRYEAR14=. scdny2016dx=0 delivery_flag=0 dxpos=. i=26 dx=  j=. _ERROR_=1 _N_=1
NOTE: The SAS System stopped processing this step because of errors.
NOTE: There were 1 observations read from the data set WORK.SCDNY2016.
WARNING: The data set WORK.SCDNY2016DX may be incomplete.  When this step was stopped there were 0 observations and 212 variables.
WARNING: Data set WORK.SCDNY2016DX 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
      
192  
193  ods html5 (id=saspy_internal) close;ods listing;

ERROR: Array subscript out of range at line 172 column 12. None

Tom
Super User Tom
Super User

Let's demonstrate how to read the SAS log.

 

You are getting this error:

ERROR: Array subscript out of range at line 172 column 12.

So looking at the log we see that line 172 is part of this statement.

172          if dx_vars[i] in ('O60', 'O61', 'O62', 'O63', 'O64', 'O65', 'O66', 'O67',
173                        'O68', 'O69', 'O70', 'O71', 'O72', 'O73', 'O74', 'O75',
174                        'O76', 'O77', 'O78', 'O79', 'O80', 'O81', 'O82', 'Z73',
175                        'Z38') then do;

The array subscript used there is the variable I.  Which from your SAS log had the value:

i=26

But your program defined that array to only have 25 variables in it.

152      array dx_vars {*} I10_DX1-I10_DX25;

As I said before you need to make sure to only use I to index into that array when it is valid.

if i in (1:25) then 
   if dx_vars[i] in ('O60', 'O61', 'O62', 'O63', 'O64', 'O65', 'O66', 'O67',
                 'O68', 'O69', 'O70', 'O71', 'O72', 'O73', 'O74', 'O75',
                      'O76', 'O77', 'O78', 'O79', 'O80', 'O81', 'O82', 'Z73',
                      'Z38') then do;
charleenjm
Calcite | Level 5

Hi Tom! Thank you and super helpful. I'm pretty new to SAS and HCUP so I appreciate it. Will give it a try. 

Tom
Super User Tom
Super User

Your problem is the IF/THEN/DO block after the first DO loop needs to only be run when the condition was found.  Otherwise I will be too large.

Just add another IF/THEN.

if scdny2016dx then 
 if dx_vars[i] in ('O60', 'O61', 'O62', 'O63', 'O64', 'O65', 'O66', 'O67'
                  ,'O68', 'O69', 'O70', 'O71', 'O72', 'O73', 'O74', 'O75' 
                  ,'O76', 'O77', 'O78', 'O79', 'O80', 'O81', 'O82', 'Z73' 
                  ,'Z38') then do;
/* Flag for delivery diagnosis */
        delivery_flag = 1; 
/* Output valid record */
        output;  
end;

 

 

charleenjm
Calcite | Level 5

Here is a copy of the error message: 

142  ods listing close;ods html5 (id=saspy_internal) file=stdout options(bitmap_mode='inline') device=svg style=HTMLBlue; ods
142! graphics on / outputfmt=png;
NOTE: Writing HTML5(SASPY_INTERNAL) Body file: STDOUT
143  
144  data scdny2016dx;
145      set SCDNY2016;
146      /* Initialize flags and variables */
147      scdny2016dx = 0;  /* Sickle cell diagnosis flag */
148      delivery_flag = 0;  /* Delivery diagnosis flag */
149      dxpos = .;  /* Diagnosis position */
150  
151      /* Array for diagnosis codes */
152      array dx_vars {*} I10_DX1-I10_DX25;
153  
154      /* Array for procedure codes */
155      array pr_vars {*} I10_PR1-I10_PR14;  /* Adjust based on how procedure variables are named */
156  
157      /* Loop through diagnosis variables to check for sickle cell disease */
158      do i = 1 to dim(dx_vars);
159          if dx_vars[i] in ('D5700', 'D5701', 'D5702', 'D57211', 'D57212', 'D57219',
160                            'D57412', 'D57419', 'D57811', 'D57812', 'D57819',
161                            'D571', 'D5720', 'D5740', 'D5780', 'D57411') then do;
162              scdny2016dx = 1;  /* Flag for sickle cell diagnosis */
163              dxpos = i;  /* Store diagnosis position */
164              dx = dx_vars[i];  /* Store diagnosis code */
165              output;  /* Output valid record */
166              leave;  /* Exit loop after first match */
167          end;
168      end;
169  
170      /* Loop through diagnosis codes to check for pregnancy diagnoses (ICD-10) */
171      /* This loop should no longer reference dx_vars[i] directly */
172          if dx_vars[i] in ('O60', 'O61', 'O62', 'O63', 'O64', 'O65', 'O66', 'O67',
173                        'O68', 'O69', 'O70', 'O71', 'O72', 'O73', 'O74', 'O75',
174                        'O76', 'O77', 'O78', 'O79', 'O80', 'O81', 'O82', 'Z73',
175                        'Z38') then do;
176          delivery_flag = 1;  /* Flag for delivery diagnosis */
177          output;  /* Output valid record */
178      end;
179  
180      /* Loop through procedure codes to check for pregnancy-related deliveries */
181      do j = 1 to dim(pr_vars);
182          if pr_vars[j] in ('10D07Z3', '10D07Z4', '10D07Z5', '10D07Z6', '10D07Z7',
183                            '10D07Z8', '10D00Z0', '10D00Z1', '10D00Z2', '10E0XZZ',
184                            '0DQR0ZZ', '0HQ9XZZ', '0KQM0ZZ', '0W8NXZZ') then do;
185              delivery_flag = 1;  /* Flag for delivery procedure code */
186              output;  /* Output valid record */
187          end;
188      end;
189  
190      drop i j;  /* Drop the loop index variables */
191  run;
ERROR: Array subscript out of range at line 172 column 12.
AGE=46 AGEDAY=. AGEMONTH=. AHOUR=0900 AMONTH=. ANESTH=20 ATYPE=1 AWEEKEND=0 BILLTYPE=0111 BLOOD=0 BWT=. DaysToEvent=. DHOUR=1500
DIED=0 DISP_X=01 DISPUB04=1 DISPUNIFORM=1 DMONTH=. DQTR=. DRG=974 DRG_NoPOA=974 DRGVER=33 DSHOSPID=0001 DXPOA1=Y DXPOA2=Y DXPOA3=Y
DXPOA4=Y DXPOA5=Y DXPOA6=Y DXPOA7=N DXPOA8=Y DXPOA9=N DXPOA10=Y DXPOA11=Y DXPOA12=Y DXPOA13=Y DXPOA14=Y DXPOA15=N DXPOA16=N
DXPOA17=N DXPOA18=Y DXPOA19=X DXPOA20=Y DXPOA21=Y DXPOA22=  DXPOA23=  DXPOA24=  DXPOA25=  DXVER=10 E_POA1=  E_POA2=  E_POA3= 
E_POA4=  E_POA5=  E_POA6=  E_POA7=  E_POA8=  E_POA9=  FEMALE=0 HCUP_ED=1 HCUP_OS=0 HISPANIC=0 HISPANIC_X=2 Homeless=. HOSPST=NY
I10_DX_Admitting=B20 I10_DX1=B20 I10_DX2=J9601 I10_DX3=B59 I10_DX4=R6520 I10_DX5=N170 I10_DX6=A419 I10_DX7=E870 I10_DX8=N183
I10_DX9=K921 I10_DX10=B3781 I10_DX11=F329 I10_DX12=K219 I10_DX13=E785 I10_DX14=E860 I10_DX15=E222 I10_DX16=F4322 I10_DX17=E8342
I10_DX18=I129 I10_DX19=Z8572 I10_DX20=D509 I10_DX21=E872 I10_DX22=  I10_DX23=  I10_DX24=  I10_DX25=  I10_ECAUSE1=  I10_ECAUSE2= 
I10_ECAUSE3=  I10_ECAUSE4=  I10_ECAUSE5=  I10_ECAUSE6=  I10_ECAUSE7=  I10_ECAUSE8=  I10_ECAUSE9=  I10_NDX=21 I10_NECAUSE=0 I10_NPR=4
I10_PR1=5A1945Z I10_PR2=0BH17EZ I10_PR3=0BBD8ZX I10_PR4=0B958ZX I10_PR5=  I10_PR6=  I10_PR7=  I10_PR8=  I10_PR9=  I10_PR10= 
I10_PR11=  I10_PR12=  I10_PR13=  I10_PR14=  I10_PROCTYPE=1 KEY=362016100000001 LOS=40 LOS_X=40 MDC=25 MDC_NoPOA=25 MDNUM1_R=117363
MDNUM2_R=116572 MEDINCSTQ=. OS_TIME=0 PAY1=2 PAY1_X=17 PAY2=. PAY2_X=  PAY3=. PAY3_X=  PAYER1_X=211 PAYER2_X=  PL_CBSA=. PL_NCHS=.
PL_RUCC=. PL_UIC=. PL_UR_CAT4=. POA_Disch_Edit1=0 POA_Disch_Edit2=0 POA_Hosp_Edit1=0 POA_Hosp_Edit2=0 POA_Hosp_Edit3=0
POA_Hosp_Edit3_Value=0.01 PointOfOrigin_X=1 PointOfOriginUB04=1 PRDAY1=. PRDAY2=. PRDAY3=. PRDAY4=. PRDAY5=. PRDAY6=. PRDAY7=.
PRDAY8=. PRDAY9=. PRDAY10=. PRDAY11=. PRDAY12=. PRDAY13=. PRDAY14=. PRVER=10 PSTATE=NY PSTCO=. PSTCO2=. RACE=2 RACE_X=02
TOTCHG=356997 TOTCHG_X=356997 TRAN_IN=0 TRAN_OUT=0 VisitLink=. YEAR=2016 ZIP=  ZIP3=  ZIPINC_QRTL=. AYEAR=. BMONTH=. BYEAR=.
PRMONTH1=. PRMONTH2=. PRMONTH3=. PRMONTH4=. PRMONTH5=. PRMONTH6=. PRMONTH7=. PRMONTH8=. PRMONTH9=. PRMONTH10=. PRMONTH11=.
PRMONTH12=. PRMONTH13=. PRMONTH14=. PRYEAR1=. PRYEAR2=. PRYEAR3=. PRYEAR4=. PRYEAR5=. PRYEAR6=. PRYEAR7=. PRYEAR8=. PRYEAR9=.
PRYEAR10=. PRYEAR11=. PRYEAR12=. PRYEAR13=. PRYEAR14=. scdny2016dx=0 delivery_flag=0 dxpos=. i=26 dx=  j=. _ERROR_=1 _N_=1
NOTE: The SAS System stopped processing this step because of errors.
NOTE: There were 1 observations read from the data set WORK.SCDNY2016.
WARNING: The data set WORK.SCDNY2016DX may be incomplete.  When this step was stopped there were 0 observations and 212 variables.
WARNING: Data set WORK.SCDNY2016DX 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
      
192  
193  ods html5 (id=saspy_internal) close;ods listing;

ERROR: Array subscript out of range at line 172 column 12. None

Kathryn_SAS
SAS Employee

Can you try adding the $ to your ARRAY statements as I mentioned in my previous post:

/* Array for diagnosis codes */
    array dx_vars {*} $ I10_DX1-I10_DX25; 
    
    /* Array for procedure codes */
    array pr_vars {*}  $ I10_PR1-I10_PR10; 
Tom
Super User Tom
Super User

@Kathryn_SAS wrote:

Can you try adding the $ to your ARRAY statements as I mentioned in my previous post:

/* Array for diagnosis codes */
    array dx_vars {*} $ I10_DX1-I10_DX25; 
    
    /* Array for procedure codes */
    array pr_vars {*}  $ I10_PR1-I10_PR10; 

Adding the $ will not do anything if the variables mentioned already exist.

And if they do not exist then you probably would also want to include the LENGTH so that the data step compiler knows what length to use when making the variables.  Otherwise it will make them with length of $8 .

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 10 replies
  • 945 views
  • 4 likes
  • 4 in conversation