[英]How to create flag inform whether was some change in two columns on ID in PROC SQL in SAS Enterprise Guide?
[英]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
如何在 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.