Я пытаюсь создать пользовательское преобразование в SAS DI. Это преобразование будет «воздействовать» на столбцы в наборе входных данных, создавая желаемый результат. Для простоты предположим, что преобразование будет использовать input_col1
для вычисления output_col1
, input_col2
для вычисления output_col2
и так далее до некоторого заданного количества столбцов для обработки (скажем, 2).
В разделе Параметры кода пользовательского преобразования пользователи могут указать (через подсказки) имена столбцов, над которыми нужно действовать; например, пользователь может указать, что input_col1
должен ссылаться на столбец с именем «order_datetime» во входном наборе данных, и либо сделать аналогичную спецификацию для input_col2
, либо оставить это приглашение пустым.
Вот код, который я использую для создания вывода для пользовательского преобразования:
data cust_trans;
set &_INPUT0;
i=1;
do while(i<3);
call symputx('index',i);
result = myfunc("&&input_col&index");
output_col&index = result; /*what is proper syntax here?*/
i = i+1;
end;
run;
Здесь myfunc
относится к пользовательской функции, которую я создал с помощью proc fcmp, которая отлично работает.
Пользовательское преобразование работает нормально, если я не пытаюсь учитывать переменное количество входных столбцов для действия (т.е. если я использую "&&input_col&i"
вместо "&&input_col&index"
и просто использую столбец result
в выходной таблице).
Однако у меня есть две проблемы с попыткой сделать подход более динамичным:
- #P7# <блочная цитата> #P8# блочная цитата>
- Я не знаю, как сделать так, чтобы присваивание желаемому выходному столбцу происходило динамически; т. е. в зависимости от итерации цикла do я хотел бы присвоить выходное значение соответствующему выходному столбцу.
Я уверен, что решение этой проблемы должно быть хорошо известно экспертам, но я не могу найти ничего, объясняющего, как это сделать.
Любая помощь приветствуется!