/* 2018.04.16 9. összefoglaló gyakorlat SAS többváltozós elemzés */ /* Server files and folders-ben Files-ban elemzes mappa letrehozasa --> ide adatallomanyok feltoltese */ /* logikai elemzes konyvtar letrehozasa SAS-ban, ami hivatkozik az elobbi fizikai eleresi utra */ libname elemzes "/home/jozsefcsicsman/elemzes"; /* Cimke hozzaadasa az allomanyhoz */ data elemzes.adat1; set elemzes.adat1; label f2='3 fázisú hatásos teljesítmény'; label f3='3 fázisú fogyasztás'; label f4='3 fázisú meddő fogyasztás'; label f5='3 fázisú látszólagos fogyasztás'; label f6='3 fázisú teljesítmény tényező'; label f7='P1 teljesítmény'; label f8='P2 teljesítmény'; label f9='P3 teljesitmény'; label f10='U1 feszültség'; label f11='U2 feszültség'; label f12='U3 feszültség'; label f13='I1 áram'; label f14='I2 áram'; label f15='I3 áram'; run; /* Alapstatisztikak az adaton */ proc contents data=elemzes.adat1; run; proc means data=elemzes.adat1; run; proc univariate data=elemzes.adat1; run; proc corr data=elemzes.adat1; run; /* Klaszter elemzeshez a megfelelo adatallomany elokeszitese */ data elemzes.klaszter (keep= napszam adat1 adat2 adat3 adat4 adat5 adat6 adat7 adat8 adat9 adat10 adat11 adat12 adat13 adat14 adat15 adat16 adat17 adat18 adat19 adat20 adat21 adat22 adat23 adat24 adat25 adat26 adat27 adat28 adat29 adat30 adat31 adat32 adat33 adat34 adat35 adat36 adat37 adat38 adat39 adat40 adat41 adat42 adat43 adat44 adat45 adat46 adat47 adat48 adat49 adat50 adat51 adat52 adat53 adat54 adat55 adat56 adat57 adat58 adat59 adat60 adat61 adat62 adat63 adat64 adat65 adat66 adat67 adat68 adat69 adat70 adat71 adat72 adat73 adat74 adat75 adat76 adat77 adat78 adat79 adat80 adat81 adat82 adat83 adat84 adat85 adat86 adat87 adat88 adat89 adat90 adat91 adat92 adat93 adat94 adat95 adat96 ); array adat(100); array adatalap(53000); array adatnap(53000) $21 ; retain adat adatalap adatnap napszam i; if _N_ eq 1 then i=1; set elemzes.adat1 END=vege; adatalap(_N_)=f2; /* Itt adhato meg hogy melyik valtozo legyen majd elemezve */ adatnap(_N_)=hisztorikus_adatok; /* Itt kerem be a napokat, hogy lassuk melyik nap az aktualis rekord */ i=i+1; if vege=1 then do; put "Rekordszám:" i; do l=0 to 531; do k=0 to 96; adat(k+1)=adatalap((l*96)+(k+1)); napszam=substr(adatnap((l*96)+1),1,11); /*A kiiratas miatt ez az oszlop utolso lett, de ev/ho/nap bontasban latszik*/ if(mod(((l*96)+(k+1)),96)=0) then output; end; end; end; run; /* Klaszter elemzes kodja */ proc fastclus data=elemzes.klaszter out=elemzes.kalsztereredmeny /*elemezendo adatot az elozo kodreszlet hozta letre*/ maxclusters=5 maxiter=10 outseed=elemzes.seed; /*itt lehet a klaszter es iteracio szamot allitani, a seed allomany a klaszterek tomegkozeppontjat irja le*/ var adat1 adat2 adat3 adat4 adat5 adat6 adat7 adat8 adat9 adat10 /*itt a valtozokat kell megadni amennyit akarunk*/ adat11 adat12 adat13 adat14 adat15 adat16 adat17 adat18 adat19 adat20 adat21 adat22 adat23 adat24 adat25 adat26 adat27 adat28 adat29 adat30 adat31 adat32 adat33 adat34 adat35 adat36 adat37 adat38 adat39 adat40 adat41 adat42 adat43 adat44 adat45 adat46 adat47 adat48 adat49 adat50 adat51 adat52 adat53 adat54 adat55 adat56 adat57 adat58 adat59 adat60 adat61 adat62 adat63 adat64 adat65 adat66 adat67 adat68 adat69 adat70 adat71 adat72 adat73 adat74 adat75 adat76 adat77 adat78 adat79 adat80 adat81 adat82 adat83 adat84 adat85 adat86 adat87 adat88 adat89 adat90 adat91 adat92 adat93 adat94 adat95 adat96; run; /* A seed allomanybol elhagyjuk a klaszterstatisztikakat */ data elemzes.seed_abra (drop=_CRIT_ _FREQ_ _RMSSTD_ _NEAR_ _GAP_ _RADIUS_); set elemzes.seed; run; /* Grafikon keszites az F2 valtozo klasztereredmenye alapjan */ /* Letrehozunk 1 soros allomanyokat ahol egy klaszter 96 adata van */ data elemzes.k1 elemzes.k2 elemzes.k3 elemzes.k4 elemzes.k5 ; set elemzes.seed_abra (drop = Cluster) ; select (_N_) ; when (1) output elemzes.k1 ; when (2) output elemzes.k2 ; when (3) output elemzes.k3 ; when (4) output elemzes.k4 ; when (5) output elemzes.k5 ; end ; run ; /* Az elozoben letrohozott 1 soros adatot oszloppa transzponaljuk */ proc transpose data=elemzes.k1 out=valami; run; proc transpose data=elemzes.k2 out=valami2; run; proc transpose data=elemzes.k3 out=valami3; run; proc transpose data=elemzes.k4 out=valami4; run; proc transpose data=elemzes.k5 out=valami5; run; /* A letrehozott 1 oszlopos tablakhoz hozza rendelunk egy idopont valtozot mely eggyel no vegig */ data valami (drop=_NAME_); set valami; if _N_ eq 1 then idopont=0; idopont+1; rename COL1=klaszter1; run; data valami2 (drop=_NAME_); set valami2; if _N_ eq 1 then idopont=0; idopont+1; rename COL1=klaszter2; run; data valami3 (drop=_NAME_); set valami3; if _N_ eq 1 then idopont=0; idopont+1; rename COL1=klaszter3; run; data valami4 (drop=_NAME_); set valami4; if _N_ eq 1 then idopont=0; idopont+1; rename COL1=klaszter4; run; data valami5 (drop=_NAME_); set valami5; if _N_ eq 1 then idopont=0; idopont+1; rename COL1=klaszter5; run; /* Egyesitjuk az allomanyokat */ data egyutt (keep=ido klaszter1 klaszter2 klaszter3 klaszter4 klaszter5); merge valami valami2 valami3 valami4 valami5; by idopont; rename idopont=ido ; run; /* Grafikonrajzolashoz az egyforma struktura elkeszitese(ido,klaszter) */ data val ; set egyutt(keep=ido klaszter1); var='klaszter1'; rename klaszter1=klaszter; run; data val2 ; set egyutt(keep=ido klaszter2); var='klaszter2'; rename klaszter2=klaszter; run; data val3 ; set egyutt(keep=ido klaszter3); var='klaszter3'; rename klaszter3=klaszter; run; data val4 ; set egyutt(keep=ido klaszter4); var='klaszter4'; rename klaszter4=klaszter; run; data val5 ; set egyutt(keep=ido klaszter5); var='klaszter5'; rename klaszter5=klaszter; run; /* Vegso adatallomany amelybol rajzoljuk a grafikont */ data klaszterfgvhez; set val val2 val3 val4 val5; run; /* Grafikon tenyleges kirajzolasa */ goptions reset=all; /* Minden grafikus elem visszaallitasa */ symbol1 i=join; /* A grafikonok gorbejenek a stilusat lehet megadni */ axis1 label=(color=darkblue height=1 'Idő') order=(0 to 96 by 4); axis2 label=(color=darkblue height=1 'értékek'); legend1 frame label=( height=1 'Klaszterek') value=(t=1 "átlag feletti napok (57)" t=2 "átlag alatti napok (170)" t=3 "Kiugró értékeket tartalmazó napok (15)" t=4 "átlagos terhelésű napok (137)" t=5 "Legkisebb forgalmú napok (153)"); proc gplot data=klaszterfgvhez; plot klaszter*ido=var/ legend=legend1 haxis=axis1 vaxis=axis2; title 'Klasztereksúlypontok közös ábrán'; run; /* A Faktoranalizis elokeszitesehez letrehozzuk a merge segitsegevel a megfelelo adatallomanyt */ data elemzes.napok_egyutt; merge elemzes.napf2 elemzes.napf4 elemzes.napf5 elemzes.napf7 elemzes.napf8 elemzes.napf9 elemzes.napf13 elemzes.napf14 elemzes.napf15; by napszam; run; /* Faktoranalizis */ Proc factor data=elemzes.napok_egyutt; label f2='3 fázisú hatásos teljesítmény'; label f4='3 fázisú meddő fogyasztás'; label f5='3 fázisú látszólagos fogyasztás'; label f7='P1 teljesítmény'; label f8='P2 teljesítmény'; label f9='P3 teljesítmény'; label f13='I1 áram'; label f14='I2 áram'; label f15='I3 áram'; run;