SAS синтаксис для этого было бы проще, если ваши переменные именуются числовой суффикс. То есть, если у вас было десять переменных с именами eq1, eq2, ...., eq10, то вы могли бы просто использовать списки переменных для определения обоих наборов переменных.
Существует несколько способов перевода вашей логики рекодирования. Если мы предположим, что у вас есть чистые переменные, мы можем просто использовать логическое выражение для генерации результата 0/1. Так что, если 4 и 5 соответствуют 1, а остальная карта равна 0, вы можете использовать x in (4,5)
или x > 3
в качестве булевого выражения.
data want;
set have;
array old eq1-eq10 ;
array new r_eq1-r_eq10 ;
do i=1 to dim(old);
new(i) = old(i) in (4,5);
end;
run;
Если у вас есть пропущенные значения или другие осложнения, вы можете захотеть использовать IF/THEN логика или ЗЕЬЕСТ или вы могли бы определить формат, который вы могли бы использовать для преобразования значений.
Если ваш список имен более случайный, вам может потребоваться генерация новых имен переменных, например, макрокоманды.
Вот один из методов, который использует синтаксис списка переменных eq:
в SAS, который раньше аналогичен синтаксису выбора вашей переменной. Используйте PROC TRANSPOSE в пустой (obs = 0) версии вашего исходного набора данных, чтобы получить набор данных с именами переменных, которые соответствуют вашему шаблону имен.
proc transpose data=have(obs=0) out=names;
var eq: ;
run;
Затем создайте две макропеременные со списком старых и новых имен.
proc sql noprint ;
select _name_
, cats('r_',_name_)
into :old_list separated by ' '
, :new_list separated by ' '
from names
;
quit;
Затем вы можете использовать две макропеременные в своих операциях ARRAY.
array old &old_list ;
array new &new_list ;
Можете ли вы показать до и после данных с именами переменных? Вы меняете имена переменных? Или сделать НОВЫЕ переменные? Вы меняете значения переменных? Если да, то как? Например, что означает (1/4 = 1)? Это похоже на явно ложное булевское выражение. – Tom
Я хотел бы создать новые переменные, используя исходные имена переменных, но с префиксом (r_). Выражение (1/4 = 1) означает, что значения {1,2,3,4} должны быть перекодированы в 1. Переменные являются скалярными [1,2,3,4,5], и я хотел бы перекодировать 4 и 5 в 1 и 1,2,3 в 0. – vashts85
Почему вы перекодируете переменные? Почему бы просто не привязать формат к переменным? – Tom