SAS:在现有数据集的特定位置插入多个列或行

时间:2017-09-22 01:49:02

标签: sas

目标:在数据集中的特定位置后添加一个或多个空行

这是我迄今所做的工作:

data test_data;
    set sashelp.class;
    output;

    /* Add a blank line after row 5*/
    if _n_ = 5 then do;
        call missing(of _all_);
        output;
    end;

    /* Add 4 blank rows after row 7*/

    if _n_ = 7 then do;
        /* inserts a blank row after row 8 (7 original rows + 1 blank row) */
        call missing(of _all_);

        /*repeats the newly created blank row: inserts 3 blank rows*/
        do i = 1 to 3;
            output;
        end;
    end;
run;

我还在学习如何使用SAS,但我感觉"就像那里有一个更好的方法来获得相同的结果,主要是不必使用for循环来插入多个空行。多次这样做,我忘记了 n 应该是哪些值。我在想:

  1. 有没有更好的方法为行执行此操作?
  2. 是否有相应的列? (A similar question probably
  3. 这些行/列的添加更多以适合报告格式。数据集本身并不需要这些空行/列。是否有一些PROC或REPORT功能实现相同的功能?

1 个答案:

答案 0 :(得分:0)

您是否只想在每组观察结果后为报告添加空白? 例如,让我们使用组变量创建一个虚拟数据集。

data test_data ;
  set sashelp.class ;
  if _n_ <= 5 then group=1;
  else if _n_ <=7 then group=2 ;
  else group=3 ;
run;

现在我们可以制作一个报告,在每个组之后添加两个空行。

proc report data=test_data ;
  column group name age ;
  define group / group noprint ;
  define name / display ;
  define age / display;
  compute after group ;
     line @1 ' ';
     line @1 ' ';
  endcomp;
run;

或者您的报告数据是否具有所有可能的值并且您希望输出具有所有可能的值?

所以我们想要一份报告,根据年龄计算我们班上有多少孩子,我们需要报告10到18岁。但我们班上没有10岁的孩子。制作一个虚拟表并与之合并。

proc freq data=sashelp.class ;
  tables age / noprint out=counts;
run;

proc print data=counts;
run;

data shell;
  do age=10 to 18;
    retain count 0 percent 0;
    output;
  end;
run;

data want ;
  merge shell counts  ;
  by age;
run;

proc print data=want ;
run;