如何在SAS数据集中统计每1000个观察值

如何在SAS数据集中统计每1000个观察值,sas,Sas,我有一些数据集按变量排序 我需要从一开始就每1000次观察,计算其中field1=1,然后用同样的方法计算下1000次观察 我该怎么做呢?我希望我能正确理解您的要求 您可以尝试这样的数据步骤 data result (Keep=countob obnr); retain obnr 1000; retain countob 0; set mydata; if field1=1 then countob=countob+1; if mod(_n_,1000) = 0 then do; outp

我有一些数据集按变量排序

我需要从一开始就每1000次观察,计算其中field1=1,然后用同样的方法计算下1000次观察


我该怎么做呢?

我希望我能正确理解您的要求

您可以尝试这样的数据步骤

data result (Keep=countob obnr);

retain obnr 1000;
retain countob 0;

set mydata;
if field1=1 then
countob=countob+1;

if mod(_n_,1000) = 0 then do;
output;
obnr=obnr+1000;
countob=0;
end;
run;
这将导致如下结果:

obnr | countob
------------
1000 | 247
2000 | 325
3000 | 198

obnr显然是可选的…

我希望我能正确理解您的要求

您可以尝试这样的数据步骤

data result (Keep=countob obnr);

retain obnr 1000;
retain countob 0;

set mydata;
if field1=1 then
countob=countob+1;

if mod(_n_,1000) = 0 then do;
output;
obnr=obnr+1000;
countob=0;
end;
run;
这将导致如下结果:

obnr | countob
------------
1000 | 247
2000 | 325
3000 | 198

obnr显然是可选的…

另一种略短的方式,利用
CEIL
-功能和
PROC FREQ
-程序:

data want;
  set have;
  thousand=ceil(_N_/1000)*1000;
run;
proc freq data=want;
  tables thousand / out=want;
  where field1=1;
run;

另一种略短的方式,利用
CEIL
-功能和
PROC FREQ
-程序:

data want;
  set have;
  thousand=ceil(_N_/1000)*1000;
run;
proc freq data=want;
  tables thousand / out=want;
  where field1=1;
run;

有一件事我的结果集中有obnr,每行只有1000个,你也可以简单地尝试obnr=\u n;而不是obnr=obnr+1000;这应该会导致同样的结果。否则,如果复制我的代码,我不知道为什么它会保持在1000…有一件事,我的结果集中的obnr在每行中只有1000个,您也可以简单地尝试obnr=\u n;而不是obnr=obnr+1000;这应该会导致同样的结果。否则我不知道如果你复制我的代码为什么会保持在1000。。。