字符形式的多项式到数字 (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" ;