【发布时间】:2015-04-09 20:36:36
【问题描述】:
希望我的问题措辞正确。
我提取了一系列板球记分卡,现在有“x”个记分卡(数据集),每个都包含“n”行观察结果。我想要做的是通过自动将每个记分卡数据集除以 8 来从“x”记分卡创建“k”个子集。(例如,我的一个记分卡有 168 个观察值,因此这个记分卡将分为 21 个子集,而另一个记分卡包含128 个条目,因此它将分为 16 个子集)。
然后我想转置每个“k”个子集,这将给我一个包含一行的数据集。最后,我想堆叠“k”个转置数据集以创建一个大数据集。
小例子:
NT Broom
b Henry
21
12
15
3
1
140
JD ryder
b Henry
1
3
2
0
0
50.00
(从其中一张记分卡中提取的小片段)上述数据集将被分成 2 个子集,然后将 2 个子集中的每一个转置以生成以下 (2) 个数据集:
NT Broom b henry 21 12 15 3 1 140.00JD Ryder b Henry 1 3 2 0 0 50.00
这两个数据集将堆叠在每个数据集之上:
NT Broom b henry 21 12 15 3 1 140.00
JD Ryder b Henry 1 3 2 0 0 50.00
希望这是有道理的。
提前致谢, Ankit
我已经做了一些事情:
/击球子集宏/
proc sql;
select count (8) into:total from compile_bat_cleaned_&match;
quit;
%macro create_subsets(count,compile_bat_cleaned_665647);
%let cnt = %sysfunc(ceil(%sysevalf(&count/8)));
%let num = 1;
%do i = 1 %to &cnt;
%if(&i = &cnt) %then %do;
%let toread = &count;
%end;
%else %do;
%let toread = &num + 7;
%end;
data compile_bat_cleaned_665647_&i;
set compile_bat_cleaned_665647 (firstobs=&num obs=%eval(&toread));
run;
proc transpose data = compile_bat_cleaned_665647_&i out = compile_bat_cleaned_665647_&i (drop=_name_);
var bat_det_2_term details_4;
data compile_bat_cleaned_665647_&i;
set compile_bat_cleaned_665647_&i (firstobs = 2);
rename COL1 = Batsman
COL2 = Dismissal
COL3 = Runs_Scored
COL4 = Minutes
COL5 = Balls
COL6 = Fours
COL7 = Sixes
COL8 = Strike_Rate;
%let num = %eval(&num + 8);
%end;
data batters_merged_665647;
set
%do i = 1 %to &cnt;
compile_bat_cleaned_665647_&i
%end;
;
run;
%mend create_subsets;
%create_subsets(&total,compile_bat_cleaned_665647);
上述代码适用于单个记分卡 (match=665647),但不适用于一系列记分卡数据。我将宏更改为 %macro create_subsets(count,compile_bat_cleaned_&match)
但它似乎不起作用
【问题讨论】:
-
你有没有尝试过?我们不会为你做这个项目!向我们展示您尝试过的代码,特别是哪些代码不起作用。
-
哦,是的,绝对 - 我已经编辑了我上面的问题并包含了我的一些代码
-
听乔的,这里不需要宏。