Dynamic variable names in SAS

12,082

Solution 1

If you create an array of Var1 - VarN then you can easily reference the value stored in Index.

data have;
input Index  Var1   Var2  Var3;
cards;
1      78.3   54.7  79.8
3      67.2   56.2  12.3
2      65.3   45.2  98.1
1      56.2   49.7  11.3
1      67.2   98.2  98.6
;
run;

data want;
set have;
array vars(*) var: ;
var_index=vars(index);
run;

Solution 2

I think the simplest solution would be to use VVALUEX function. It creates the variable name using the index, and then supplies it as an argument to the function -

var_index = vvaluex(compress("var" || put(index, 8.)));
Share:
12,082
user997943
Author by

user997943

Updated on June 08, 2022

Comments

  • user997943
    user997943 about 2 years

    Is there a way in SAS to specify dynamic variable names in code? i.e. use different variables on different observations based on the value of another variable?

    For example, my input data set could be:

    Index  Var1   Var2  Var3
    1      78.3   54.7  79.8
    3      67.2   56.2  12.3
    2      65.3   45.2  98.1
    1      56.2   49.7  11.3
    1      67.2   98.2  98.6
    

    And I want to add a column that holds the value of Var*Index*. i.e. the output I'd want would be:

        Index  Var1   Var2  Var3  Var_Index
        1      78.3   54.7  79.8  78.3
        3      67.2   56.2  12.3  12.3
        2      65.3   45.2  98.1  45.2
        1      56.2   49.7  11.3  56.2
        1      67.2   98.2  98.6  67.2
    

    I'm unable to use call symput to get this to work. Also I should mention that my real problem is slightly more complicated, and I already have a messy brute force method but I'm looking for something clean.