在SAS中格式化以创建存储桶

时间:2019-07-02 21:30:47

标签: sas format

我使用以下代码在SAS中存储我的连续变量,但是它不起作用:

proc freq data = right;
  table Age;
run; 

proc format;
value AgeBuckets  
  low -<  74 = "Younger"
  75 -< 84 = "Older"
  85 - high = "Oldest"
run;

data right;
  format Age AgeBuckets.;
run;

它将删除所有记录,因此我那里没有更多数据。我在做什么错了?

此外,也许最好用if / then语句在连续变量的基础上简单地创建一个新变量(存储桶版本)?

2 个答案:

答案 0 :(得分:2)

您只是不设置数据集-而是创建一个新数据集。

data right;
  set right;
  format Age AgeBuckets.;
run;

proc print;
run;

此外,您还不包括年龄段中的74岁和84岁。您可能还希望包括它们:

proc format;
value AgeBuckets  
  low -<  74 = "Younger"
  74 -< 84 = "Older"
  84 - high = "Oldest"
run;

答案 1 :(得分:0)

  1. 您在数据步骤中犯了一个错误,因为您没有SET语句,所以没有引用输入文件。
  2. 使用IF / THEN语句几乎没有效率
  3. 如果要使用新变量,请使用PUT对其进行转换,如此处所示
  4. 在输入和输出数据集中使用相同名称进行编程是一个糟糕的主意,这使得发现错误非常困难。

    proc format;
    value AgeBuckets  
      low  -< 75 = "Younger"
      75 -< 85 = "Older"
      85 - high = "Oldest"
    run;
    
    data right_formatted;
      set right;
      format Age AgeBuckets.;
      *create new variable with formatted value, will not sort correctly;
      Age_Formatted = put(age, ageBuckets.);
    run;
    

和:

   *applying a format means that it sorts correctly for display;
   proc freq data=right_formatted;
   table age age_formatted ;
   format age ageBuckets.;
   run;

@Python R SAS用户的格式也正确。