Dariusz P.

Dariusz P. Researcher

Temat: sas - automatyzacja pobierania plikow

Mam do wykonania te same analizy na wielu plikach txt w SAS, zaimportowanie pojedynczego pliku i wykonanie analiz nie jest kłopotem, jednak jak mogę automatycznie - podając katalog - importować każdy kolejno plik i wykonywać dla niego analizę?

Interesuje mnie rozwiązanie w SAS Enterprise Guide / SAS 4GL

dziekuję
Maciej B.

Maciej B. Doktorant

Temat: sas - automatyzacja pobierania plikow

Kody z tego artykułu powinny Ci pomóc.

edit:

jak również znajdujące się tutaj :)Maciej B. edytował(a) ten post dnia 07.07.12 o godzinie 15:43
Dariusz P.

Dariusz P. Researcher

Temat: sas - automatyzacja pobierania plikow

ooo, dziękuje bardzo;

tylko nie wiedzieć dlaczego , nie ma ochoty zczytywac mi danych, jakieś sugestie?
2 przykładowe pliki txt. mam w C:\Users\dp\Desktop\dane\wiele

błąd encoding w logach tez nie wiem z jakiego powodu, poza tym skryptem , importując plik normalnie, wszystko jest poprawne..
---------

%let dirname = C:\Users\dp\Desktop\dane\wiele ;
filename DIRLIST pipe "dir /B &dirname\*.txt";

data dirlist ;
length
date 8
day_of_week 8
counter_35 8
counter_0 8
realcounter 8 ;

LABEL
date = "Date"
day_of_week = "Day_of_week"
counter_35 = "Counter-35"
counter_0 = "Counter-0"
realcounter = "RealCounter" ;

FORMAT
date YYMMDD10.
day_of_week BEST1.
counter_35 BEST5.
counter_0 BEST5.
realcounter BEST5. ;

INFORMAT
date YYMMDD10.
day_of_week BEST1.
counter_35 BEST5.
counter_0 BEST5.
realcounter BEST5. ;

infile dirlist

LRECL=25655
FIRSTOBS=2
ENCODING="WLATIN2"
DLM='3a'x
MISSOVER
DSD ;

input
date : ?? YYMMDD9.
day_of_week : ?? BEST1.
counter_35 : ?? BEST5.
counter_0 : ?? BEST5.
realcounter : ?? BEST5. ;;

run;
proc print data = dirlist;
run;

-----------------------------------------------------------
log:

943 %let dirname = C:\Users\dparzych\Desktop\dane\wiele ;
944 filename DIRLIST pipe "dir /B &dirname\*.txt";
945
946 data dirlist ;
947 length
948 date 8
949 day_of_week 8
950 counter_35 8
951 counter_0 8
952 realcounter 8 ;
953
954 LABEL
955 date = "Date"
956 day_of_week = "Day_of_week"
957 counter_35 = "Counter-35"
958 counter_0 = "Counter-0"
959 realcounter = "RealCounter" ;
960
961 FORMAT
962 date YYMMDD10.
963 day_of_week BEST1.
964 counter_35 BEST5.
965 counter_0 BEST5.
966 realcounter BEST5. ;
967
968 INFORMAT
969 date YYMMDD10.
970 day_of_week BEST1.
971 counter_35 BEST5.
972 counter_0 BEST5.
973 realcounter BEST5. ;
974
975 infile dirlist
976
977
978 LRECL=25655
979 FIRSTOBS=2
980 ENCODING="WLATIN2"
--------
23
ERROR 23-2: Invalid option name ENCODING.

981 DLM='3a'x
982 MISSOVER
983 DSD ;
984
985
986 input
987 date : ?? YYMMDD9.
988 day_of_week : ?? BEST1.
989 counter_35 : ?? BEST5.
990 counter_0 : ?? BEST5.
991 realcounter : ?? BEST5. ;;
992
993 run;

NOTE: System SAS zatrzymał wykonywanie tego kroku z powodu błędów.
WARNING: Zbiór WORK.DIRLIST może być niekompletny. Gdy krok został zatrzymany, występowało 0 obserwacji i 5 zmiennych.
WARNING: Zbioru WORK.DIRLIST nie zastąpiono, ponieważ krok zatrzymano.
NOTE: Instrukcja DATA zajęła (całkowity czas przetwarzania):
czasu rzeczywistego 0.02 sek.
czasu cpu 0.01 sek.

994 proc print data = dirlist;
995 run;

NOTE: Zbiór WORK.DIRLIST nie zawiera obserwacji.
NOTE: PROCEDURE PRINT zajęła (całkowity czas przetwarzania):
czasu rzeczywistego 0.00 sek.
czasu cpu 0.00 sek.Dariusz P. edytował(a) ten post dnia 07.07.12 o godzinie 17:54
Maciej B.

Maciej B. Doktorant

Temat: sas - automatyzacja pobierania plikow

Może spróbuj zmienić na 'utf-8' i potem w input masz znaki zapytania zamiast określenia miejsca danych...
W ogóle się zastanawiam czy ta część:


LRECL=25655
FIRSTOBS=2
ENCODING="WLATIN2"
DLM='3a'x
MISSOVER
DSD ;


jest Ci potrzebna. Jak wygląda struktura pliku?
Dariusz P.

Dariusz P. Researcher

Temat: sas - automatyzacja pobierania plikow

Struktura plików wygląda następująco w pliku .txt:

Date:Day_of_week:Counter-35:Counter-0:RealCounter
2012/2/29:2:48097:47605:30843

czyli po wczytaniu:


Obs date day(..) Counter_30 Counter_0 realcounter
1 2012-02-29 2 48097 47605 30843
2 2012-03-01 3 13594 39000 33343
3 2012-03-02 4 22991 28345 22845

w pliku tekstowym dane oddzielone sa " : " , bez klopotu je importuje w graficznym , jak 4gl, ale pojedynczo.
Własnie zależy mi na tym, by pobierać po kolejno kazdy plik z katalogu .txt , wykonać zaprogramowane analizy i wypluć raport dla każdego z plików..
trochę posprawdzam jeszcze możliwości, jakbyś miał jakieś sugestie, będę wdzięczny :)
pozdrawiam!

konto usunięte

Temat: sas - automatyzacja pobierania plikow

Nie wiem czy dobrze zrozumiałem, masz zmienną ilość plików a chciałbyś je zaimportować?
Nie wiem na czym jest ten SAS, ale z możesz wydać komendę X, czyli wyjść do systemu i tam normalnie ls /home/user/folder_z_danymi >wynik.txt. Następnie importujesz plik z nazwami plików, wrzucasz do macra i po kolei importujesz każdy plik. Dobrze też sobie wtedy zrobić tabelę z już pobranymi plikami, wtedy do katalogu wrzucasz nowe pliki a kod pilnuje by nie zaimportować drugi raz tego samego pliku.
Dariusz P.

Dariusz P. Researcher

Temat: sas - automatyzacja pobierania plikow

jest to folder zawierający mniej więcej 200 plików z roszczeniem .txt w jednym katalogu (raczej stała liczba, jeden przebieg analizy)
pliki maja ta sama strukturę danych;
chce zaprogramować to w taki sposób w SAS, żeby mi każdy z osobna plik importował, wykonał analizy (te same dla każdego) i wygenerował raport dla każdego z osobna.

cały przebieg analizy dla pliku mam zaprogramowany, jednak chce jeszcze wyposażyć go o ta automatyzację w pobieraniuDariusz P. edytował(a) ten post dnia 08.07.12 o godzinie 15:05

konto usunięte

Temat: sas - automatyzacja pobierania plikow

Chciałem opisać sposób jaki ja stosuję ale kolega podał mi szybszy.

%let _adres_zbiorow ='/home/zbiory_do_analizy/';
filename cmd pipe %unquote("ls &_adres_zbiorow");
data zbior;
infile cmd pad;
input plik $255.;
put plik;
run;

proc sql noprint;
select plik into: _zbior separated ' ' from zbior;
quit;
%put &_zbior;

W zmiennej _adres_zbiorow masz katalog który Cię interesuje, w tabeli zbior masz wszystkie pliki, a zmienna &_zbior masz nazwy wszystkich plików. Ja to w makrze skanuję i tym steruję wykonywaniem kodu dla każdego pliku z osobna. Jak masz naprawdę dużo plików to może lepiej tabelką sterować.
Dariusz P.

Dariusz P. Researcher

Temat: sas - automatyzacja pobierania plikow

dziękuję, będę starał się to tak rozwiązać

Następna dyskusja:

wizualizacja raportowania k...




Wyślij zaproszenie do