Array Processing |
Example 1: Using Character Variables in an Array |
You can specify character variables and their lengths in ARRAY statements. The following example groups variables into two arrays, NAMES and CAPITALS. The dollar sign ($) tells SAS to create the elements as character variables. If the variables have already been declared as character variables, a dollar sign in the array is not necessary. The INPUT statement reads all the variables in array NAMES.
The statement inside the DO loop uses the UPCASE function to change the values of the variables in array NAMES to uppercase and then store the uppercase values in the variables in the CAPITALS array.
options nodate pageno=1 linesize=80 pagesize=60; data text; array names{*} $ n1-n10; array capitals{*} $ c1-c10; input names{*}; do i=1 to 10; capitals{i}=upcase(names{i}); end; datalines; smithers michaels gonzalez hurth frank bleigh rounder joseph peters sam ; proc print data=text; title 'Names Changed from Lowercase to Uppercase'; run;
The following output shows the TEXT data set.
Using Character Variables in an Array
Names Changed from Lowercase to Uppercase 1 Obs n1 n2 n3 n4 n5 n6 n7 n8 n9 n10 1 smithers michaels gonzalez hurth frank bleigh rounder joseph peters sam Obs c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 i 1 SMITHERS MICHAELS GONZALEZ HURTH FRANK BLEIGH ROUNDER JOSEPH PETERS SAM 11
Example 2: Assigning Initial Values to the Elements of an Array |
This example creates variables in the array TEST and assigns them the initial values 90, 80, and 70. It reads values into another array named SCORE and compares each element of SCORE to the corresponding element of TEST. If the value of the element in SCORE is greater than or equal to the value of the element in TEST, the variable NewScore is assigned the value in the element SCORE, and the OUTPUT statement writes the observation to the SAS data set.
The INPUT statement reads a value for the variable named ID and then reads values for all the variables in the SCORE array.
options nodate pageno=1 linesize=80 pagesize=60; data score1(drop=i); array test{3} t1-t3 (90 80 70); array score{3} s1-s3; input id score{*}; do i=1 to 3; if score{i}>=test{i} then do; NewScore=score{i}; output; end; end; datalines; 1234 99 60 82 5678 80 85 75 ; proc print noobs data=score1; title 'Data Set SCORE1'; run;
The following output shows the SCORE1 data set.
Assigning Initial Values to the Elements of an Array
Data Set SCORE1 1 New t1 t2 t3 s1 s2 s3 id Score 90 80 70 99 60 82 1234 99 90 80 70 99 60 82 1234 82 90 80 70 80 85 75 5678 85 90 80 70 80 85 75 5678 75
Example 3: Creating an Array for Temporary Use in the Current DATA Step |
When elements of an array are constants that are needed only for the duration of the DATA step, you can omit variables from an array group and instead use temporary array elements. You refer to temporary data elements by the array name and dimension. Although they behave like variables, temporary array elements do not have names, and they do not appear in the output data set. Temporary array elements are automatically retained, instead of being reset to missing at the beginning of the next iteration of the DATA step.
To create a temporary array, use the _TEMPORARY_ argument. The following example creates a temporary array named TEST:
options nodate pageno=1 linesize=80 pagesize=60; data score2(drop=i); array test{3} _temporary_ (90 80 70); array score{3} s1-s3; input id score{*}; do i=1 to 3; if score{i}>=test{i} then do; NewScore=score{i}; output; end; end; datalines; 1234 99 60 82 5678 80 85 75 ; proc print noobs data=score2; title 'Data Set SCORE2'; run;
The following output shows the SCORE2 data set.
Data Set SCORE2 1 New s1 s2 s3 id Score 99 60 82 1234 99 99 60 82 1234 82 80 85 75 5678 85 80 85 75 5678 75
Example 4: Performing an Action on All Numeric Variables |
This example multiplies all the numeric variables in array TEST by 3.
options nodate pageno=1 linesize=80 pagesize=60; data sales; infile datalines; input Value1 Value2 Value3 Value4; datalines; 11 56 58 61 22 51 57 61 22 49 53 58 ; data convert(drop=i); set sales; array test{*} _numeric_; do i=1 to dim(test); test{i} = (test{i}*3); end; run; proc print data=convert; title 'Data Set CONVERT'; run;
The following output shows the CONVERT data set.
Output From Using a _NUMERIC_ Variable List
Data Set CONVERT 1 Obs Value1 Value2 Value3 Value4 1 33 168 174 183 2 66 153 171 183 3 66 147 159 174
Copyright © 2010 by SAS Institute Inc., Cary, NC, USA. All rights reserved.