Вопрос по – Имена динамических переменных в SAS
Есть ли способ в SAS указывать имена динамических переменных в коде? то есть использовать разные переменные в разных наблюдениях, основываясь на значении другой переменной?
Например, мой набор входных данных может быть:
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
И я хочу добавить столбец, который содержит значение Var * Index *. то есть результат, который я хотел бы получить:
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
Я не могу использоватьcall symput
чтобы заставить это работать. Также я должен отметить, что моя настоящая проблема немного сложнее, и у меня уже есть грязный метод грубой силы, но я ищу что-то чистое.
Ответ @ keith должен работать, если вы просто хотите сохранить значение из переменной VAR с именем, оканчивающимся на порядковый номер в var_index ... если в решении есть больше переменных, обновите ваш вопрос
Jay Corbett
4
ответа
вы можете легко ссылаться на значение, хранящееся в 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;
Я должен был быть более ясным, когда спрашивал. Скажите, что переменные были var_IBM var_Apple и т. Д. Вместо этого?
user997943
Код по-прежнему должен работать, если все переменные, которые вы хотите, начинаются с var_ (var: в моем коде означает все переменные, начинающиеся с 'var'). Если нет, то укажите первую и последнюю переменные в списке массивов, разделенные знаком «-», например, массив vars {*} a - z;
Longfish
Разве шаг данных не сработает?
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;
Может, я что-то упустил? но это должно дать вам результат вашего вопроса.
Проблема в том, что такой подход становится беспорядочным, если вы скажете 100-200 переменных. Я надеялся на более макро-подход, я мог бы сказать, var_index = var & ind. где макропеременная ind хранит значение Index
user997943
См. Код Кита ниже, если у вас их так много.
DataParadigms
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;
Похожие вопросы
Ответ @ keith должен работать, если вы просто хотите сохранить значение из переменной VAR с именем, оканчивающимся на порядковый номер в var_index ... если в решении есть больше переменных, обновите ваш вопрос