如何通过数据步骤或过程sql查询SAS循环多个数据集?



我有多个数据集(100+),它们都包含相同的3列(code_num, replication, total_qty),每个列都有一个不同的代码(code_num)。

data code_num_1
code_num replicate total_qty
12345       376       45
12345       76        67
12345       943       300
.
.
data code_num_2
code_num replicate total_qty
12234       85       746
12234       900      35
12234       726      273
.
.

等。

如果可能的话,我想通过一个数据步骤来运行这些数据集:

data test;
set test_; <-- datasets will go here...
if _N_ in(&PercentileRow10,&PercentileRow20,&PercentileRow30,&PercentileRow40,&PercentileRow50,&PercentileRow60,&PercentileRow70, &PercentileRow80,&PercentileRow90);
run;

*注:&percentilerow是一个宏观变量,它将从数据集中获得百分位数。列数将决定百分位数。我事先有了这一步:

proc sql no print; 

create table ___ as选择code_num,复制,Sum (qty)为total_qty从____按code_num分组,复制按total_qty排序;辞职;

理想情况下,我希望获得每个数据集的百分位数,并创建一个新的数据集,该数据集将包含每个百分位数以及相关的重复发生次数和总数。我可以使用宏和do循环来运行我的数据集,通过这个数据集来产生新的数据集吗?

data code_num_1_perc
percentile replicate qty
10           87      45
20           933     65
30           34      100
.
.
90           467      837

这是我对每个数据集code_num_#的理想输出。如果可能的话

如果我对需求的理解是正确的,那么建议的方法是有缺陷的。

例如,序列的中位数(第50个百分位数),如1、2、3、4、5、6、7、8、9、10是5.5。5.5在数据集中不存在,那么如何选择复制号呢?

我的建议是一个完全不同的过程。查看PROC RANK以了解如何处理关系以及您希望如何处理它们。您没有指定将使用哪个变量来计算百分位数。

  1. 将所有数据集合并为一个,添加数据集标识符,唯一标识每个数据集。
data combined;
length source data_set_name $50.;
set code_num_: indsname = source;
data_set_name = source;
run;
  1. 使用PROC RANK分组成十分位数
proc rank data=combined out=combined_deciles groups=10;
by data_set_name;
var total_qty;
ranks PRanks;
run;
  1. 获取每个rank的第一个(或最后一个,基于需求)值
data want;
set combined_deciles;
by datasetName Pranks;
if first.Pranks;
run;

最新更新