SAS中文论坛

标题: 请问在sas中如何访问数据集的成员变量? [打印本页]

作者: shiyiming    时间: 2006-6-20 13:15
标题: 请问在sas中如何访问数据集的成员变量?
比如一个sas数据集只有一个观测,我想在一个循环中把这个数据集的一个成员变量与一个数比较。请问怎样才能实现?多谢了!

下面是我的程序:(对数据集baby.alll2003前i个观测进行线性回归,把计算的统计量输出到est&i数据集中,其中有变量_RSQ_,它表示Rsquare)
%macro ToRegFirstI(i);
data toReg&i;
set baby.alll2003(obs=&i);
keep lr lu;
run;
proc reg data=toReg&i outest=est&i;
model lr=lu / selection=rsquare;
run;
%mend;

%macro analysis(first,last);
%let max=0;
%let k=0;
%do i=&first %to &last;
%ToRegFirstI(&i);
%if est&i._RSQ_>&max %then
%do;
%let max=est&i._RSQ_;
%let k=&i;
%end;
%end;
%put k=&k maxRsquare=&max;
%mend;

%analysis(100,200);

但是这样运行出来的结果在log窗口显示为k=200 maxRsquare=est200_RSQ_
这是怎么一回事呢?
作者: shiyiming    时间: 2006-6-20 21:23
标题: re
In %if est&i._RSQ_>&max %then 中 est&i._RSQ_ is not 变量, is a string.
if est&i._RSQ_ is 变量, it should be put in IF....THEN DO...END block (not %if....%then.) to another data statement.
作者: shiyiming    时间: 2006-6-23 11:08
标题: re
我按你说的把程序修改了下,但结果还是不行,不知道是怎么回事?麻烦你能说的清楚些,多谢了!
程序如下:
%macro ToRegFirstI(i);
data toReg&i;
set baby.alll2003(obs=&i);
keep lr lu;
run;
proc reg data=toReg&i outest=est&i;
model lr=lu / selection=rsquare;
run;
%mend;

%macro analysis(first,last);
%let max=0;
%let k=0;
%do i=&first %to &last;
%ToRegFirstI(&i);
data _NULL_;
set est&i;
if _RSQ_>&max then
do;
%let max=_RSQ_;
%let k=&i;
end;
run;
%end;
%put k=&k maxRsquare=&max;
%mend;

%analysis(150,200);




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2