字符形式到数字形式的多项式(SAS)

字符形式到数字形式的多项式(SAS),sas,character,numeric,polynomials,Sas,Character,Numeric,Polynomials,我有一个SAS数据集,其中包含一列多项式。例如,X1**(-2)+X1**(2) 是否有函数将其转换为数值表达式 非常感谢,如果我理解正确,我认为没有一个特定的功能可以让您轻松地完成此操作。您有两种选择—编写自己的逻辑来解释多项式表达式,或者使用call execute让SAS为您写出一个(可能很长的)数据步骤,假设多项式都作为有效的数据步骤代码输入。这里有一种调用执行方法: data have; input x1 polynomial $255.; infile datalines trunc

我有一个SAS数据集,其中包含一列多项式。例如,X1**(-2)+X1**(2)

是否有函数将其转换为数值表达式


非常感谢,

如果我理解正确,我认为没有一个特定的功能可以让您轻松地完成此操作。您有两种选择—编写自己的逻辑来解释多项式表达式,或者使用
call execute
让SAS为您写出一个(可能很长的)数据步骤,假设多项式都作为有效的数据步骤代码输入。这里有一种
调用执行
方法:

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;

将它们转换为宏变量,然后将它们解析为计算

使用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 ;
请确认-您有一个数据集,其中包含一个值为多项式表达式的字符变量?同一数据集中是否已经有一个名为x1的数值变量?是的,变量x1是一个连续变量。 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" ;