字符形式的多项式到数字 (SAS)
Polynomials in character form to numeric (SAS)
我有一个包含一列多项式的 SAS 数据集。例如,X1**(-2)+X1**(2).
是否有将其转换为数值表达式的函数?
非常感谢,
如果我没有理解错的话,我不认为有一个特定的函数可以让你轻松地做到这一点。您有两个选择 - 编写您自己的逻辑来解释多项式表达式,或者使用 call execute
让 SAS 为您写出一个(可能很长)数据步骤,假设多项式都作为有效数据步骤代码输入.这是一个 call execute
方法:
data have;
input x1 polynomial 5.;
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;
将它们转化为宏变量,再解析为计算...
使用 user667489 的回答中的数据集示例:
/* 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" ;
我有一个包含一列多项式的 SAS 数据集。例如,X1**(-2)+X1**(2).
是否有将其转换为数值表达式的函数?
非常感谢,
如果我没有理解错的话,我不认为有一个特定的函数可以让你轻松地做到这一点。您有两个选择 - 编写您自己的逻辑来解释多项式表达式,或者使用 call execute
让 SAS 为您写出一个(可能很长)数据步骤,假设多项式都作为有效数据步骤代码输入.这是一个 call execute
方法:
data have;
input x1 polynomial 5.;
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;
将它们转化为宏变量,再解析为计算...
使用 user667489 的回答中的数据集示例:
/* 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" ;