Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sas中需要相同的输出_Sas - Fatal编程技术网

在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;