@muskagap:
When you code Y_1950-Y_2000 in the array variable specification, you tell SAS to incorporate variables with the suffixes 1950 through 2000 inclusively incrementing them by 1. You cannot tell SAS to use a different increment. In your case, since all you variables are in the required sequence and all have the Y_ prefix, you can simply specify instead:
array table1 Y_: ;
Note that if you have other PDV variables prefixed with Y_, it's not going to work, and you'll have to list all the array variables explicitly, i.e.:
array table1 Y_1950 Y_1960 Y_1970 Y_1980 Y_1990 Y_2000 ;
I realize that if you have, say, 100 variables like these, it can be quite inconvenient. To avoid such tedious hard coding, you can construct your variable list before your DATA step commences its compilation and pass it via a macro variable or via executing a macro. For example:
data _null_ ;
call symputx ("varlist", "") ;
do i = 1950 to 2000 by 10 ;
call symputx ("varlist", catx (" ", symget ("varlist"), catx ("_", "Y", i))) ;
end ;
run ;
data your_step ;
array table1 &varlist ;
run ;
Or, if you prefer:
%macro varlist (prefix, from, to, by) ;
%do i = &from %to &to %by &by ;
&prefix&i
%end ;
%mend ;
data _null_ ;
array table1 %varlist(Y_,1950,2000,10) ;
run ;
Or, if you're an SQL fan:
proc sql noprint ;
select "Y_" || put (1950 + 10 * (monotonic()-1), z4.) into :varlist separated by " " from sashelp.zipcode where monotonic() le 6 ;
quit ;
data your_step ;
array table1 &varlist ;
run ;
NOTE, however: The array syntax above defines an implicitly subscripted array indexed by the automatic auto-dropped variable _I_, so in your DO looping code you must use _I_ instead of INDEX. (The same is true about your DIFF array.) If you don't want to use it, there're two ways around.
First: Tell SAS in the implicit array specification that you want the array indexed by INDEX:
array table1 (index) Y_: ;
Second: Define an explicitly subscripted array:
array table1 [*] Y_: ;
Then you can use any numeric variable you want for its index.
Kind regards
Paul D.
... View more