Macros sas中基于准则的子集
希望我的问题措辞正确 我已经拉了一系列板球记分卡,现在有了“x”记分卡(数据集),每个记分卡包含“n”行观察结果。我要做的是通过自动将每个记分卡数据集除以8,从“x”记分卡创建“k”子集。(例如,我的一个记分卡有168个观察结果,因此该记分卡将分为21个子集,而另一个记分卡包含128个条目,因此将分为16个子集) 然后我想转置每个“k”子集,这将给我一个包含一行的数据集。最后,我想对“k”转置数据集进行堆栈,以创建一个大数据集 小例子:Macros sas中基于准则的子集,macros,sas,subset,Macros,Sas,Subset,希望我的问题措辞正确 我已经拉了一系列板球记分卡,现在有了“x”记分卡(数据集),每个记分卡包含“n”行观察结果。我要做的是通过自动将每个记分卡数据集除以8,从“x”记分卡创建“k”子集。(例如,我的一个记分卡有168个观察结果,因此该记分卡将分为21个子集,而另一个记分卡包含128个条目,因此将分为16个子集) 然后我想转置每个“k”子集,这将给我一个包含一行的数据集。最后,我想对“k”转置数据集进行堆栈,以创建一个大数据集 小例子: NT Broom b Henry 21 12 15 3 1
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布鲁姆b亨利21121531140.00
JD Ryder b Henry 1 3 2 0 0 50.00
NT布鲁姆b亨利21121531140.00
JD Ryder b Henry 1 3 2 0 0 50.00
希望这是有意义的
提前感谢,,
安基特
到目前为止,我已经做了一些:
/击球子集宏/
上述代码适用于单个记分卡(match=665647),但不适用于一系列记分卡数据。我将宏更改为%macrocreate\u子集(计数、编译\u bat\u cleaned\u匹配)
但它似乎不起作用您缺少的是分组处理。SAS中的大多数内容不必为每个ID拆分为一个数据集或诸如此类的内容;分配一个ID变量,然后通过该变量执行任何操作
在这种情况下,如果您有一个变量
playerID
,前8行为1,后8行(9-16)为2,等等,那么您可以通过playerID进行转置代码>,只进行一次转换,所有数据都从一个数据集转换到另一个数据集。没有宏,没有大惊小怪。你试过什么吗?我们不会为你做这个项目的!向我们展示您尝试过的代码,特别是不起作用的代码。哦,是的,绝对-我已经编辑了上面的问题,并包含了一些代码听Joe说,这里不需要宏。谢谢Joe,我可以使用宏。谢谢,安基特
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);