代码之家  ›  专栏  ›  技术社区  ›  lydias

SAS将数据转换成长格式

  •  0
  • lydias  · 技术社区  · 7 年前

    我有以下数据集,希望将其转换为长格式:

    data have ;
      input Height $ Front Middle Rear ;
      cards;
      Low    125 185 126
      Low    143 170 136
      Low    150 170 129
      Low    138 195 136
      Low    149 162 147
      Medium 141 176 128
      Medium 137 161 133
      Medium 145 167 148
      Medium 150 165 145
      Medium 130 184 141
      High   129 157 149
      High   141 152 137
      High   148 186 138
      High   130 164 126
      High   137 176 138
      ;
    run;
    

    这里的高度是低,中,高。位置是前面,中间和后面。数值是按书架上书籍的位置和高度计算的价格。

    我希望将数据集转换为包含列的长格式:

    高度、位置和价格

    下面的代码只允许我将位置转换成长格式。我应该如何同时转换高度?

    data bookp;
    set bookp;
    dex = _n_; 
    run;
    
    proc sort data=bookp;
    by dex;
    run;
    
    proc transpose data=bookp
    out=bookpLong (rename=(col1=price _name_= location )drop= _label_ dex);
    var front middle rear;
    by dex; 
    run;
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Tom    7 年前

    我想你只需要在BY表中加上身高。

    首先,我们将示例数据转换为SAS数据集。

    data have ;
      input Height $ Front Middle Rear ;
    cards;
     Low    125 185 126
     Low    143 170 136
     Medium 141 176 128
     Medium 137 161 133
     High   129 157 149
     High   141 152 137
    ;
    

    现在让我们添加一个标识符来唯一地标识每一行。请注意,如果您真的使用数据步骤读取数据,则可以在读取数据的同一步骤中执行此操作。

    data with_id ;
      row_num+1;
      set have;
    run;
    

    现在我们可以转置。

    proc transpose data=with_id out=want (rename=(_name_=Location col1=Price));
      by row_num height ;
      var front middle rear ;
    run;
    

    结果:

    Obs    row_num    Height    Location    Price
    
      1       1       Low        Front       125
      2       1       Low        Middle      185
      3       1       Low        Rear        126
      4       2       Low        Front       143
      5       2       Low        Middle      170
      6       2       Low        Rear        136
      7       3       Medium     Front       141
      8       3       Medium     Middle      176
      9       3       Medium     Rear        128
     10       4       Medium     Front       137
     11       4       Medium     Middle      161
     12       4       Medium     Rear        133
     13       5       High       Front       129
     14       5       High       Middle      157
     15       5       High       Rear        149
     16       6       High       Front       141
     17       6       High       Middle      152
     18       6       High       Rear        137
    
    推荐文章