如何在SAS中创建分层列结构

时间:2019-08-08 13:56:03

标签: sas

我正在尝试将一列设为SAS数据集中另一列的“父”列。

以下是数据集:

Column1    Column2
Class1     Subclass1
Class1     Subclass2
Class1     Subclass3
Class2     Subclass4
Class2     Subclass5
Class3     Subclass6

我想创建以下列,其中子类在每个类的下方列出(带有缩进):

NewColumn
Class1
   Subclass1
   Subclass2
   Subclass3
Class2
   Subclass4
   Subclass5
   Subclass6

问题:如何在SAS中做到这一点?

2 个答案:

答案 0 :(得分:3)

您可以使用proc手段来复制此输出,但是如果您确实希望在数据集中将其复制,则可以使用以下内容:

data want;
set have;
by column1 column2;
format new_column $15.;
if first.column1 then do;
    new_column=column1;
    output;
end;
new_column=put(column2,$15. -r); * right align;
output;
run;

答案 1 :(得分:3)

在统计上测量关联的响应变量时,通常需要过程TABULATEREPORT的输出中需要这种分类层次显示形式。

以下是这些proc的一些示例代码:

title;
ods html close;
ods html style=plateau;

data have;
  do rows = 1 to 100;
    _n_ = ceil(3*ranuni(123));
    level1 = cats('Class', _n_);
    level2 = cats('Subclass ', ceil(3*(_n_-1) + 3 * ranuni(123)));
    x = _n_ * 100 + ceil (50*ranuni(123));
    output;
  end;
run;

proc tabulate data=have;
  class level1 level2;
  var x;
  table  
    level1 * (all level2)
    ,
    x * (mean n)
    /
    nocellmerge
  ;
run;    

proc report data=have;
  columns level1 level2 nested x x=n;
  define level1 / group noprint;
  define level2 / group noprint;
  define nested / computed  width=50;
  define x / 'X (Mean)' mean format=6.2;
  define n / 'N' N;
  break before level1 / summarize;
  compute nested / char length=50;
    if missing(level2) then 
      nested = level1;
    else
      nested = "A0202020"x || level2;
  endcomp;
run;

enter image description here