Pergunta sobre variables, sas, dynamic – Nomes de variáveis ​​dinâmicas no SAS

3

Existe uma maneira no SAS para especificar nomes de variáveis ​​dinâmicas no código? isto é, usar variáveis ​​diferentes em observações diferentes com base no valor de outra variável?

Por exemplo, meu conjunto de dados de entrada poderia ser:

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

E eu quero adicionar uma coluna que contém o valor de Var * Index *. ou seja, a saída que eu gostaria seria:

    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

Não consigo usarcall symput para que isso funcione. Também devo mencionar que o meu problema real é um pouco mais complicado, e eu já tenho um método de força bruta, mas estou procurando algo limpo.

A resposta de @keith deve funcionar se você quiser apenas armazenar o valor da variável VAR com um nome que termina no número do índice em var_index ... se houver mais variáveis ​​para a solução, atualize sua pergunta Jay Corbett

Sua resposta

4   a resposta
0
data want;
    set have;
    length _var_name $32 _var_num 5;
    array vars(*) var: ;
    /* if you want name of variable */
    _var_name=VNAME(vars(index));
    /* if you want numeric suffix of variable 
            and suffix is not same as position of variable in array
          (so that vars(index) is not usable */
    _var_num=INPUT(SUBSTR(_var_name, ANYDIGIT(_var_name)),32.);
run;

0

Uma etapa de dados não funcionaria?

 data assign_value;
  set have;

  if index = 1 then var_index = var1;
  else if index = 2 then var_index = var2;
  else if index = 3 then var_index = var3;
run;

Eu posso estar faltando alguma coisa? mas isso deve dar o resultado da sua pergunta.

Veja o código de Keith abaixo se você tem tantos. DataParadigms
O problema é que esse tipo de abordagem fica confuso se você disser 100-200 variáveis. Eu estava esperando por uma abordagem mais macro aqui eu poderia dizer var_index = var & ind. onde a variável macro ind armazena o valor de Index user997943
3

poderá facilmente referenciar o valor armazenado em 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;
Eu deveria ter sido mais claro ao perguntar. Digamos que as variáveis ​​foram var_IBM var_Apple etc. user997943
O código ainda deve funcionar, se todas as variáveis ​​desejadas começarem com var_ (o var: no meu código significa todas as variáveis ​​que começam com 'var'). Caso contrário, especifique a primeira e a última variáveis ​​na lista de matriz separadas por '-', por ex. array vars {*} a - z; Longfish
2

ia o nome da variável usando o índice e, em seguida, fornece-o como um argumento para a função -

var_index = vvaluex(compress("var" || put(index, 8.)));

Perguntas relacionadas