У меня есть набор данных SAS, который содержит один столбец полиномов. Например, X1**(-2)+X1**(2).
Есть ли функция для преобразования этого в числовое выражение?
Большое спасибо,
У меня есть набор данных SAS, который содержит один столбец полиномов. Например, X1**(-2)+X1**(2).
Есть ли функция для преобразования этого в числовое выражение?
Большое спасибо,
Если я вас правильно понял, я не думаю, что есть конкретная функция, которая легко позволит вам это сделать. У вас есть два варианта: написать собственную логику для интерпретации полиномиальных выражений или использовать call execute
, чтобы SAS записал для вас (потенциально очень длинный) шаг данных, предполагая, что все полиномы введены как действительный код шага данных. Вот call execute
подход:
data have;
input x1 polynomial $255.;
infile datalines truncover;
datalines;
1 X1**(-2)+X1**(2)
2 X1**(-1)+X1**(1)
3 X1**(1)+X1**(-1)
;
run;
data _null_;
set have end = eof;
if _n_ = 1 then call execute('data want; set have; select(_n_);');
call execute(catx(' ','when(',_N_,') y =',polynomial,';'));
if eof then call execute('end; run;');
run;
Преобразуйте их в макропеременные, а затем преобразуйте их в вычисление...
Используя пример набора данных в ответе пользователя667489:
/* Create numbered macro variables, 1 per row of data */ data _null_ ; set have end=eof ; call symputx(cats('POLY',_n_),polynomial) ; if eof then call symputx('POLYN',_n_) ; run ; %MACRO ROWLOOPER ; %DO N = 1 %TO &POLYN ; if _n_ = &N then result = &&POLY&N ; %END ; %MEND ; data want ; set have ; /* Not very efficient, looping over all polynomials on each row of data */ /* So for 3 rows, you'll perform 9 iterations here */ %ROWLOOPER ; run ;
Или, в качестве альтернативы, запишите свой набор данных в программу SAS и %inc
эту программу:
data _null_ ; file "polynomials.sas" ; set have end=eof ; if _n_ = 1 then do ; put "data poly;" ; put " set have;" ; end ; put " result = " polynomial ";" ; if eof then put "run;" ; run ; %inc "polynomials.sas" ;