b*****r 发帖数: 359 | 1 %let sample_size = 600;
%let sample_num = 5000;
*sample construction;
%macro samples;
%do j = 1 %to &sample_num;
%let i = 1; * counter;
%do %while (&i <= &sample_size);
data _null_; set sys_risk (obs =1);
call symputx("beta", beta);
run;
beta_new = &beta ; format beta_new best24.;
* if beta > 1 , then add the observations in sample_j;
%if beta_new > 1 %then
%do;
data tempSample;
set tempSample;
if time >= -10;
run;
proc append base = sample&j data = tempSample;
run;
%let i = %eval(&i+1);
%end;
%end;
%end;
%mend samples;
%samples;
run;
上面这段代码,我要用 beta>1 数据建立样本。用 call symputx 得到的 beta 是符号格
式,我要转为数值型数据(它本身也是数值型数据),以便在 %if beta_new > 1 %
then 里面可以用。
可是,运行的时候出错,大家帮我看看,应该怎么改。
谢谢 |
b*****r 发帖数: 359 | 2 我得到的错误:
ERROR: A character operand was found in the %EVAL function or %IF condition
where a numeric operand is required. The condition was: beta_new > 1
ERROR: The macro SAMPLES will stop executing.
问题: 在macro里面怎样把由
data _null_; set sys_risk (obs =1);
call symputx("beta", beta);
run;
得到的符号型变量(beta)转换成数值型数据?
PS:在表格sys_risk里面,beta本来就是数值型数据,精确到小数点后6位。 |
l****u 发帖数: 529 | 3 try this to see if it works.
%if %eval(&beta)>1 %then %do;
............. |
b*****r 发帖数: 359 | 4 这个不行,
因为,beta是符号型变量,
不能放在 %eval(&beta)里。
【在 l****u 的大作中提到】 : try this to see if it works. : %if %eval(&beta)>1 %then %do; : .............
|
k*******a 发帖数: 772 | 5 data _null_; set sys_risk (obs =1);
call symputx("beta", beta);
run;
beta_new = &beta ; format beta_new best24.;
run后面的data step的语句必须得出现在data step里面,不能单独出现
%if beta_new > 1 里面的 beta_new 应该要是一个macro variable, 否者系统认为
是 beta_new这个字符和 1 比较。 需要把beta_new的存到一个macro里面再用 |
l****u 发帖数: 529 | 6 Did you run it on your computer?
this code works well on mine.
%let beta=4;
%macro p;
%if %eval(&beta)>1 %then %do;
%put β
%end;
%mend;
%p
in log:
4
you have already defined beta as macro variable in data null step.
%eval(&beta) transfer it to a numeric value.
【在 b*****r 的大作中提到】 : 这个不行, : 因为,beta是符号型变量, : 不能放在 %eval(&beta)里。
|