2012-05-03 6 views
5

Załóżmy, że próbuję podsumować jedną zmienną (nazywam ją var_1) w bardzo dużym zbiorze danych (prawie terabajt). Zbiór danych jest długi i szeroki. Mój kod wyglądałby następująco:Czy użycie opcji KEEP w zestawach danych SAS poprawia wydajność odczytu?

PROC MEANS DATA=my_big_dataset SUM; 
    VAR var_1; 
RUN; 

Chciałbym uzyskać jakikolwiek zysk wydajności w ogóle za pomocą opcji KEEP na zbiorze odczytania? To znaczy:

PROC MEANS DATA=my_big_dataset (KEEP=var_1) SUM; 
    VAR var_1; 
RUN; 

Jeśli chodzi o dysk I/O, to wyobrażam sobie, że każdy zapis musi być przeczytany w całości bez względu na wszystko. Być może jednak potrzeba mniej pamięci, aby odczytać zapisy. Każda rada jest doceniana.

Odpowiedz

5

Tak, to robi różnicę. W większości przypadków nie jest to duża różnica, ale jeśli zaczniesz mieć bardzo szeroki lub bardzo długi zestaw danych, zaczniesz dostrzegać pewne korzyści.

Szukaj keep= na link poniżej ...

http://support.sas.com/techsup/technote/ts298.html

Jeśli masz problemy z wydajnością, może to golić ułamki sekund lub sekund od tego, co robisz, ale to nie będzie wyciąć czas przetwarzania na pół. Poszukaj innych technik optymalizacji, jeśli tego potrzebujesz.

3

Jeśli chodzi o datastep, wszystkie zmienne będą odczytywane do PDV, chyba że podasz instrukcję DROP lub KEEP.

Do procedur, I oczekiwać SAS jest na tyle sprytny, aby czytać tylko zmienne używane w ramach procedury. Może ktoś może to potwierdzić?

Można łatwo skonstruować kilka testów, aby to ustalić.

+0

Dobra sugestia - postaram się przeprowadzić analizę porównawczą w trakcie kilku kolejnych wielkich odczytów z tego zestawu. –

3

Nie znajduję niczego, co wskazywałoby, że instrukcja KEEP jest bardziej wydajna (lub konieczna) dla PROC MEANS.

Można jednak uzyskać większą wydajność za pomocą instrukcji WHERE, a także za pomocą innych w kodzie MEANS.

1

Uważam, że instrukcja where jest ogólnie bardziej wydajna niż opcja keep. Ale w tym przypadku, gdzie jest bezużyteczne i nie jestem pewien, dodając opcję keep w wywołaniu proc zmieni coś.

Ale możesz sprawdzić i sprawdzić czas procesu w logu. Daj nam znać!

Edit:

miałem egzamin z jednego z największych zbiorze mam. Z opcją keep dostałem: 0.03 proces czasowy Bez opcji keep dostałem: 0.01 czas przetwarzania

Więc myślę, że SAS jest już zoptymalizowany dla tego przypadku.