SAS Variable Lists

Sunday, 25 January, 2009

⨳ 3 minute read ⨳ 551 words ⨳ quatchtip

last week, there was a blog post regarding the use of variable lists on variables with character suffixes (e.g., TestA--TestG). i added my clarifications via a comment, but thought some examples would be more useful. let’s fire up sas (9.1.3) and get going.

here’s our test dataset; notice the variables are not defined in order of their suffixes (nn1 is defined first, later nn3 gets defined, and still later nn2 is defined; same goes for the other variables).

data test;
  nn1=1; *numeric variable, numeric suffix;
  nca=1; *numeric variable, character suffix;
  cn1='a'; *character variable, numeric suffix;
  cca='a'; *character variable, character suffix;

  nn3=3;
  ncc=3;
  cn3='c';
  ccc='c';

  nn2=2;
  ncb=2;
  cn2='b';
  ccb='b';
  format n: 3. c:$3.;
run;

looking at the output from proc contents, we can confirm the ordering of the variables.

      Variables in Creation Order

 #    Variable    Type    Len    Format

 1    nn1         Num       8    3.
 2    nca         Num       8    3.
 3    cn1         Char      1    $3.
 4    cca         Char      1    $3.
 5    nn3         Num       8    3.
 6    ncc         Num       8    3.
 7    cn3         Char      1    $3.
 8    ccc         Char      1    $3.
 9    nn2         Num       8    3.
10    ncb         Num       8    3.
11    cn2         Char      1    $3.
12    ccb         Char      1    $3.

let’s look at accessing numeric variables with numeric suffixes first with a numbered range list, then with a name range list. (these are terms straight from sas help, in my original comment i called them variable lists and variable ranges, respectively).

numbered range list: nn1-nn3
nn1    nn2    nn3
  1      2      3

name range list: nn1--nn3
nn1    nca    cn1    cca    nn3
  1      1    a      a        3

note the numbered range list returns the variables in sequential order of the suffix while the named range list returns the variables in the order they appear in the dataset.

next, let’s look at character variables with numeric suffixes.

numbered range list: cn1-cn3
cn1    cn2    cn3
a      b      c

named range list: cn1--cn3
cn1    cca    nn3    ncc    cn3
a      a        3      3    c

same idea as before.

now, let’s take a look at numeric variables with character suffixes. it’s worth noting that numbered range lists do not work unless the suffix is numeric. sas will throw an error into the log indicating this.

named range list: nca--ncc
nca    cn1    cca    nn3    ncc
  1    a      a        3      3

maybe numbered range lists will work on character variables with character suffixes?

named range list: cca--ccc
cca    nn3    ncc    cn3    ccc
a        3      3    c      c

same story–numbered range lists only work on variables with numeric suffixes.

a name prefix list provides us with results that are likely closer what was desired.

name prefix list: nn:
nn1    nn3    nn2
  1      3      2

name prefix list: nc:
nca    ncc    ncb
  1      3      2

name prefix list: cn:
cn1    cn3    cn2
a      c      b

name prefix list: cc:
cca    ccc    ccb
a      c      b

name prefix lists respect creation order. also, if i had a variable named nnn or nn815, those would be included for the name prefix range nn:.


SAS Variable Lists - January 25, 2009 - Richard Koopmann