如何打印SAS数据集的最后一次观察?

时间:2011-10-31 17:16:07

标签: sas

我有一个包含1000个观察值的数据集。我只想打印出最后一个观察结果。使用以下内容:

proc print data=apple(firstobs = 1000 obs = 1000); 
run;

我可以得到最后一次观察。但我必须提前知道我的数据集有1000个观察值。如何在不知情的情况下这样做?

4 个答案:

答案 0 :(得分:7)

有很多方法可以做到这一点。这是两个:

proc sql noprint;
 select n(var1) into :nobs
 from apple;
quit;

proc print data=apple(firstobs=&nobs); run;

这只是将观察次数读入宏变量,然后使用它来指定第一次观察。 (请注意,var1是指数据中的变量。)

另一种方法是创建一个数据视图,只保留最后一个观察结果然后打印出来:

data tmp / view=tmp;
 set apple nobs=nobs;
 if _n_=nobs;
run;

proc print data=tmp; run;

答案 1 :(得分:3)

我认为endSETMERGEMODIFY语句的UPDATE选项非常有用。

data x;
  do i = 1 to 1000;
    output;
  end;
run;

data x;
  set x end = _end;
  end = _end;
proc print data = x;
  where end;
run;

答案 2 :(得分:1)

有很多方法可以找到观察次数;以下宏是一个例子。

%macro nobs (dsn);
   %let nobs=0;
   %let dsid = %sysfunc(open(&dsn));
   %if &dsid %then %let nobs = %sysfunc(attrn(&dsid,nobs));
   %let rc   = %sysfunc(close(&dsid));
   &nobs
%mend nobs;

%let n = %nobs(apple);

proc print data=apple (firstobs=&n obs=&n); run;

答案 3 :(得分:0)

有两个简单的解决方案:

解决方案1:

data result;
    set apple end=end;
    if end then output;
run;
proc print data=result;
run;

解决方案2:

data result;
    set apple nobs=nobs;
    if _N_=nobs then output;
run;
proc print data=result;
run;