Hi:
Yes, that's almost exactly right. Most folks who have ordered or numbered variables, such as VAR1-VAR10 -- think of them almost intuitively as belonging in an array structure.
For SAS datasets, the numbered variable names are what is permanently stored in the physical data. While a DATA step program is active, however, you can build an ARRAY reference, such as:
[pre]
array myvar var1-var10;
[/pre]
and then you can refer --in the program and ONLY in the program to
[pre]
myvar(1) or myvar(i) or myvar(flight_number)
[/pre]
Once the variables are stored back in the physical storage location again, if you do a PROC CONTENTS, you will see only VAR1-VAR10 -- you will never see a reference to the "myvar" array. Some data base and other file format structures do store the array name physically as a data structure. However, SAS does not.
In fact, in one program, you could have
[pre]
array myvar var1-var10
and in a different program have the reference
array xyz var1-var10;
[/pre]
and, even though "numbered" variables are the most frequent reason for using ARRAYS and DO loops in a DATA step program, you can also declare a group of "unnumbered" variables to be in an ARRAY for purposes of processing. For example:
[pre]
array nvar (*) _numeric_; (all numeric variables in an array)
array cvar (*) _character_; (all character variables in an array)
[/pre]
Note how, in the program below, you do not see any "numbered" variables from the result of the PUTLOG. Even though I referenced cvar(i) and nvar(i) in the DO loop, the log shows you the actual names of the variables, not the "array" reference:
[pre]
650 data tryarr;
651 set sashelp.class(obs=2);
652 array cvar (*) _character_;
653 array nvar (*) _numeric_;
654 putlog 'CVAR Array Ref';
655 do i = 1 to dim(cvar);
656 putlog i= cvar(i)=;
657 end;
658
659 putlog 'NVAR Array Ref';
660 do i = 1 to dim(nvar);
661 putlog i= nvar(i)=;
662 end;
663
664 run;
CVAR Array Ref
i=1 Name=Alfred
i=2 Sex=M
NVAR Array Ref
i=1 Age=14
i=2 Height=69
i=3 Weight=112.5
CVAR Array Ref
i=1 Name=Alice
i=2 Sex=F
NVAR Array Ref
i=1 Age=13
i=2 Height=56.5
i=3 Weight=84
NOTE: There were 2 observations read from the data set SASHELP.CLASS.
NOTE: The data set WORK.TRYARR has 2 observations and 6 variables.
NOTE: DATA statement used (Total process time):
real time 0.03 seconds
cpu time 0.03 seconds
[/pre]
So, there are a lot of neat things that you can do with arrays -- no macros needed. If you do a Google search or a search for user-group and SAS Global Forum papers, you will find a lot more papers that explain the ins and outs of ARRAY processing. There is a place for using macro %DO loops, but it didn't seem that you were at that place.
cynthia
... View more