按前两个字母排序和打印数据

时间:2015-09-17 02:09:14

标签: sorting sas

我有一个包含两个变量的数据集;名字和等级。每个名称附加一个等级,我首先必须收集最常用的前两个字母的频率(在这个例子中,名称的两个最常见的开头是Ja和Jo)。在找到两个最常见的前两个字母(Ja和Jo)之后,我必须从最高等级开始对这些全名进行排序。顺序为:从最高到最低排名' Ja'名字,其次是从最高到最低排名' Jo'名称。排序后,我必须生成两个单独的输出,一个用于前两个字母'中的每一个。所有' Ja'名字在一个输出中,所有' Jo'在另一个名字。这种描述可能非常令人困惑,所以我道歉。这是我的代码,但我一定做错了。我能得到的最远的是按名称或名称对名称进行排序。

proc freq data = BabyNames order=freq;
        Tables Name/ nocum nopercent;
        Where Name contains 'Ja' or
        Name contains 'Jo';
run;


proc sort data = BabyNames OUT = SortNames;
    By Name descending Rank;
    Where Name contains 'Ja' or
          Name contains 'Jo';
run;

proc print data = SortNames NOOBS;
    By Name;
    Where Name contains 'Ja' or
          Name contains 'Jo';
    Title 'Sorted J Names';
run;

2 个答案:

答案 0 :(得分:1)

您只能找到名称的频率。如何使用rank变量对数据进行排序? freq输出中没有rank变量。你怎么能把它分类?希望你明白。

proc freq data = BabyNames order=freq;
        Tables Name*rank/ nocum nopercent out=need;
        Where Name contains 'Ja' or
        Name contains 'Jo';
run;
proc sort data = need OUT = SortNames;
    By Name descending Rank;
    Where Name contains 'Ja' or
          Name contains 'Jo';
run;

答案 1 :(得分:1)

您可以使用PROC SQL一步完成,因为SAS会将​​计数重新合并回详细记录。下面是一个使用SASHELP.CLASS数据集并使用AGE作为RANK变量的示例。

proc sql noprint ;
  create table want as
   select substr(name,1,2) as two_letter
        , count(*) as freq
        , name
        , age as rank
   from sashelp.class
   group by 1
   order by 2 desc,4 desc
  ;
quit;
proc print;
run;