簡體   English   中英

SAS:proc摘要和proc排序

[英]SAS: proc Summary and proc Sort

如果你使用PROC總結與類條款,它會在這個 -clause的順序觀察結果進行排序。

proc summary data=One;
   by var_1;
   class var_2 var_3 var_4;
   output out = Two(drop= _freq_ _type_);
run;

1)我說的對嗎?

2)如果我未指定所有字段,會發生什么?

proc summary data = Three(keep= var_1 var_2 var_ 3 var_4 var_5 var_6);
   by var_1;
   class var_2 var_3;
   output out = Four(drop= _freq_ _type_ );
run;

3)哪個proc更快: proc summaryproc sort

這里要注意幾件事。

  • 為了保留相同數量的行,您需要在proc摘要語句中指定nway選項。 沒有它,您將獲得類變量的每1、2和3組合。
  • 我不確定為什么要使用BY語句(這顯然表明數據已按該變量排序)。 您可以輕松地在CLASS語句中包含var_1。
  • Proc Summary將首先按BY變量的順序對輸出進行排序,然后按指定的順序對CLASS變量進行排序。
  • 無論保留哪些變量,此邏輯均適用。
  • 在此簡單實例中,Proc Sort應該可以更快地工作,因為Proc Summary將執行不需要的進一步計算。
  • 有時,我會使用Proc Summary一步(使用maxid函數)對數據進行排序和重復數據刪除,例如,我每天有多個ID,而我只想獲取最新的ID。 這樣省去了對數據進行排序,然后提取每個ID每天的最后一條記錄的麻煩。

希望這可以幫助。

這是我最后一點的一個例子。 使用_all_要求返回數據集中的所有變量,這確實會在日志中為先前在CLASS語句中列出的變量創建警告,但是可以安全地忽略它。 基本上,我懶於不想為寬數據集分別指定其余變量。

data have;
input unique_id custno log_dt :datetime15.;
format log_dt datetime15.;
cards;
1 123 01jul2012:13:23
2 265 01jul2012:13:56
3 342 01jul2012:15:02
4 123 01jul2012:17:12
5 342 01jul2012:18:33
6 265 02jul2012:08:41
7 123 02jul2012:10:14
8 265 02jul2012:11:05
;
run;

proc summary data=have nway;
class custno log_dt;
format log_dt dtdate9.;
output out=want (drop=_:) maxid(log_dt(_all_))=;
run;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM