簡體   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