繁体   English   中英

如何计算在 SAS 企业指南中的 PROC SQL 中定义 ID 的某个值出现了多少次?

[英]How to count how many time some value appeard with defined ID in PROC SQL in SAS Enterprise Guide?

我在 SAS 企业指南中有表,如下所示: 数据类型:

  • ID - 数字

  • 服务 - 性格

    ID 服务
    123 P1
    123 P1
    123 G
    444 AB
    56 c2

而且我需要知道每个 ID 购买了每个 SERVICE 的次数,因此我需要以下内容:

ID  | P1| G | AB | c2
----|---|---|----|---
123 | 2 | 1 | 0  | 0
444 | 0 | 0 | 1  | 0
56  | 0 | 0 | 0  | 1
  • 因为例如 ID = 123 购买了 SERVICE = P1 2 次和 0 次购买了 G、AB 或 c2 等其他 ID。

如何在 SAS 企业指南中的 PROC SQL 中做到这一点?

尝试这个

data have;
input ID SERVICE $;
datalines;
123 P1 
123 P1 
123 G  
444 AB 
56  c2 
;

proc summary data = have nway;
   class ID Service;
   output out = temp(drop = _type_ rename = _freq_ = n);
run;

proc transpose data = temp out = want(drop = _:);
    by ID ;
    id Service;
    var n;
run;

如果您只想制作该报告,那么您可以使用 PROC TABULATE 直接从数据中完成。

data have;
  input ID SERVICE $;
cards;
123 P1
123 P1
123 G
444 AB
56 c2
;

proc tabulate data=have ;
  class id service;
  table id,service*N / printmiss misstext='0';
  keylabel n=' ';
run;

如果您需要将计数保存到数据集中,请使用 PROC FREQ 进行计数。

proc freq data=have ;
   tables id*service / noprint out=want sparse;
run;

然后,您可以使用 PROC REPORT 制作该报告。 ID 是分组变量,SERVICE 是 ACROSS 变量。

proc report data=want ;
    column id count,service;
    define id / group;
    define service / across ' ';
run;

如果你需要一个实际的数据集(为什么???)然后使用 PROC TRANSPOSE。 但是 SERVICE 的值必须是有效的 SAS 名称,以便它们可以用于命名数据集中的变量。

 proc transpose data=want out=wide (drop=_name_ _label_);
    by id;
    id service;
    var count;
 run;
 proc print data=wide;
 run;

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM