Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros sas中基于准则的子集_Macros_Sas_Subset - Fatal编程技术网

Macros sas中基于准则的子集

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

希望我的问题措辞正确

我已经拉了一系列板球记分卡,现在有了“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布鲁姆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),但不适用于一系列记分卡数据。我将宏更改为%macro
    create\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);