在sas中需要相同的输出
因此,我有以下数据:在sas中需要相同的输出,sas,Sas,因此,我有以下数据: Data Cricket; input match $; cards; IndVsPak NezVsAus PakVsInd WesVsPak WesVsAus IndVsPak AusVsNez ; run; 需要输出: Match Count IndVsPak 3 NezVsAus 2 WesVsPak 1 WesVsAus 1 请帮助我们编写代码,我们有多少种方法可以获得上
Data Cricket;
input match $;
cards;
IndVsPak
NezVsAus
PakVsInd
WesVsPak
WesVsAus
IndVsPak
AusVsNez
; run;
需要输出:
Match Count
IndVsPak 3
NezVsAus 2
WesVsPak 1
WesVsAus 1
请帮助我们编写代码,我们有多少种方法可以获得上述输出?祝您好运,在SAS中,几乎所有事情都是通过PROCS完成的。执行操作的宏类型 在这种情况下,我建议使用
您可以通过删除noprint选项来查看输出 如果您更习惯使用SQL,这也会起作用:
PROC SQL;
SELECT match, count(*) AS cnt FROM cricket GROUP BY match;
QUIT;
试试这个:
Data Cricket;
input match $;
cards;
IndVsPak
NezVsAus
PakVsInd
WesVsPak
WesVsAus
IndVsPak
AusVsNez
;
run;
/*standardise team order within each match - easier to do in data step*/
data temp /view = temp;
set cricket;
team1 = substr(match,1,3);
team2 = substr(match,6,3);
call sortc(of team:);
match_sorted = cats(team1,'Vs',team2);
run;
proc sql noprint;
create table want as
select match_sorted, count(match_sorted) as freq
from temp
group by match_sorted
order by freq descending
;
quit;
输出:
match_
sorted freq
IndVsPak 3
AusVsNez 2
AusVsWes 1
PakVsWes 1
下面是我完全在proc sql中完成此操作的尝试:
注意:这使用了一个计算字段—一点特定于SAS的sql功能。您可以通过将整个查询设置为生成match_sorted的子查询来消除此问题,也可以将查询展平并对所有内容使用计算字段。请分享您迄今为止所尝试的内容。大家好,我已经用proc SQL和proc freq进行了尝试。。输出是不同的,我需要与上面提到的相同的输出,考虑到您的数据包含您不希望在输出中包含的条目,例如AusVsNez和IndVsPak仅出现两次,您需要定义您希望如何创建计数的逻辑。请显示您尝试的代码,并详细解释其产生的输出不符合您的需要的原因。这里的关键是将其分为两个变量team1、team2,按顺序排序,然后进行计数。如果不对每种情况进行编码,就无法告诉SAS IndvsPak=PakvsInd,因此将它们分开是一种更容易的修复方法。如果你想得到更好的帮助,你需要包括你的代码,这表明你首先试图自己解决它,其他人会更倾向于帮助你。大家好,我已经用proc-SQL和proc-freq尝试过了。。输出是不同的,我需要与上面提到的相同的输出
match_
sorted freq
IndVsPak 3
AusVsNez 2
AusVsWes 1
PakVsWes 1
proc sql noprint;
create table want as
select
ifc(
team1 < team2,
cats(team1, 'Vs', team2),
cats(team2, 'Vs', team1)
) as match_sorted length=8,
count(calculated match_sorted) as freq
from (
select
substr(match,1,3) as team1,
substr(match,6,3) as team2
from cricket
)
group by match_sorted
order by freq descending
;
quit;