【问题标题】:Converting data set in SAS for 1-way anova将 SAS 中的数据集转换为单向方差分析
【发布时间】:2019-06-25 05:28:33
【问题描述】:

基本上我需要重新排序我的数据集。

数据由 4 列组成,每个治疗组各一列。我正在尝试在 SAS 中运行一个简单的单向方差分析,但我不知道如何对数据进行重新排序,以便有两列,一列包含响应,另一列包含处理。

这里是一些创建示例数据集的示例代码。

data have;
input A B C D;
cards;
26.72 37.42 11.23 44.33
28.58 56.46 29.63 76.86
29.71 51.91 . .
;
run;
data want;
input Response Treatment $;
cards;
26.72 A
28.58 A
29.71 A
37.42 B
56.46 B
51.91 B
11.23 C
29.63 C
44.33 D
76.86 D
;
run;

我确信这是一个非常简单的解决方案,但我没有在网站的其他地方看到同样的问题。我通常是 R 用户,但必须使用 SAS 进行此分析,因此我可能会寻找错误的关键字。

【问题讨论】:

    标签: sas format anova


    【解决方案1】:

    我为此使用了 proc transpose,见下文

    /*1. create row numbers for each obs*/
    data have1;
     set have;
     if _n_=1 then row=1;
     else row+1;
    run;
    
    proc sort data=have1; by row; run;
    
    /*Transpose the dataset by row number*/
    proc transpose data=have1 out=want0; 
    by row;
    run;
    
    /*Final dataset by removing missing values*/
    data want;
     set want0;
     drop row;
     if COL1=. then delete;
     rename _NAME_=Response
            COL1=Treatment;
    run;    
    
    proc sort data=want; by Response; run;
    
    proc print data=want; run;
    

    【讨论】:

      【解决方案2】:

      如果这是您必须使用 SAS 的数据,则只需读取即可获得 ANOVA 所需的结构。

      data have;
         do rep=1 to 3;
            do trt='A','B','C','D';
               input y @;
               output;
               end;
            end;
         cards;
      26.72 37.42 11.23 44.33
      28.58 56.46 29.63 76.86
      29.71 51.91 . .
      ;;;;
         run;
      proc print;
         run;
      

      【讨论】:

      • 我应该更清楚,这是一个简单的例子,真实的数据集要大得多
      猜你喜欢
      • 2020-06-02
      • 1970-01-01
      • 2023-03-27
      • 2017-07-23
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 2014-11-29
      相关资源
      最近更新 更多