我有一个包含两个变量的数据集;名字和等级。每个名称附加一个等级,我首先必须收集最常用的前两个字母的频率(在这个例子中,名称的两个最常见的开头是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;
答案 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;