/*... Pridano - radek 141 - 180 Zdenka */ /* radek 461 - proc sort; by tele; */ /* radek 421 - 443 - priprava dat pro REMLF9 */ /* radek 509 - proc sort; by tele; */ /*................. PRIPRZEV-zd.sas ............................... */ /* priprava souboru pro PH zevnejsek masny skot */ /* omezny pocet generaci predku */ /* navazujici programy */ /* BLUP: */ /* ARj x rozbajeni (cschms2@quick.cz) */ /* FOX prevod do textaku, format SDF */ /* prekontrolovat sloupce */ /* vyhodit hlavicku */ /* disp stru ... kontrola struktury */ /* OPRAV */ /*..................CETNOSTI */ /* . TVOSOU */ /* . UPRAVSO */ /* priprav . GLMAS */ /* . SESTROD */ /* . PRECIS */ /* kompmas.xls */ /* KOVARIANCE */ /* BLUP */ /* . ctevys */ /* . ROZVYS */ /* hodnoc . PREVOD */ /* . REZPROM */ /* . PHkor */ /* (korstab) */ /* J. Pribyl, VUZV Uhrineves 9.7.2007 */ /*.................OPRAV ........................................... */ /* opravuje vstupni udaje, podle predchoziho provereni pomoci CETNOSTI */ /*..........................................1.10.2005 */ options nodate nonumber ls=89 ps=10000; dm output 'clear'; dm log 'clear'; /*....cte...*/ filename zev 'c:/xxx/phmas/mas107/zevn/zevn.txt'; filename puv 'c:/xxx/phmas/mas107/zevn/pu.txt'; /*....zapisuje..*/ filename zev1 'c:/xxx/phmas/mas107/zevn/zevn1.txt'; filename puv1 'c:/xxx/phmas/mas107/zevn/pu1.txt'; /*......................oprava vstupnich dat podle pripominek...............*/ data a; /*.otel....*/ infile zev missover; input t $ 1-6 o $ 7-12 m $ 13-18 p $ 19-20 po $ 21-22 pm $ 23-24 ch $ 25-34 poh $ 35-36 vr $ 37-42 dat yymmdd8. datna yymmdd8. ve $ 59-60 hodnot $ 61 vkt $ 62-63 vekdnu $ 64-67 priru $ 68-71 kriz $ 72-73 del $ 74-75 hmo $ 76-77 hru $ 78-79 hlhru $ 80-81 zad $ 82-83 plec $ 84-85 hrbet $ 86-87 ozad $ 88-89 utyp $ 90-91; if o = 1 then o = .; /* neznami rodice */ if m = 1 then m = .; if m = 1 then m = .;if t = o then o = . ; if t = m then m = .; if o = m then m = .; /* if _n_ > 20 then delete; ...opravy proc print; run;..............*/ if priru<=0 then delete; if priru=. then delete; run; data b; set a; file zev1; put t $ 1-6 o $ 7-12 m $ 13-18 p $ 19-20 po $ 21-22 pm $ 23-24 ch $ 25-34 poh $ 35-36 vr $ 37-42 dat yymmdd8. datna yymmdd8. ve $ 59-60 hodnot $ 61 vkt $ 62-63 vekdnu $ 64-67 priru $ 68-71 kriz $ 72-73 del $ 74-75 hmo $ 76-77 hru $ 78-79 hlhru $ 80-81 zad $ 82-83 plec $ 84-85 hrbet $ 86-87 ozad $ 88-89 utyp $ 90-91; run; data a; /*....puvod.....*/ infile puv; input t $ 1-6 o $ 7-12 m $ 13-18 pt $ 19-20 po $ 21-22 pm $ 23-24 ; if o = 1 then o = .; /* neznami rodice */ if m = 1 then m = .; if t = o then o = . ; if t = m then m = .; if o = m then m = .; /*.......neco do oprav .......*/ data b; set a;file puv1; put t $ 1-6 o $ 7-12 m $ 13-18 pt $ 19-20 po $ 21-22 pm $ 23-24 ; run; /*................ ........................*/ /*..................CETNOSTI..................................... */ /*................cetnosti udaju masny skot */ /*.....provereni udaju v souborech uzitkovosti a puvodu */ /*..................................... 30.9.2005..Josef Pribyl...*/ /*....cte...*/ filename zev 'c:/xxx/phmas/mas107/zevn/zevn1.txt'; filename puv 'c:/xxx/phmas/mas107/zevn/pu1.txt'; /*.. zapis pochybnych udaju...*/ filename shodj 'c:/xxx/phmas/mas107/zevn/shodj'; filename shodma 'c:/xxx/phmas/mas107/zevn/shodma'; filename cevr 'c:/xxx/phmas/mas107/zevn/cevr'; filename chpoh 'c:/xxx/phmas/mas107/zevn/chpoh'; filename chvr 'c:/xxx/phmas/mas107/zevn/chvr'; filename chvekm 'c:/xxx/phmas/mas107/zevn/chvekm'; filename chvekt 'c:/xxx/phmas/mas107/zevn/chvekt'; filename chhodn 'c:/xxx/phmas/mas107/zevn/chhodn'; filename chprir 'c:/xxx/phmas/mas107/zevn/chprir'; filename chzev 'c:/xxx/phmas/mas107/zevn/chzev'; /*.................................................zevnejsek.........................*/ data a; infile zev missover; input t $ 1-6 o $ 7-12 m $ 13-18 p $ 19-20 po $ 21-22 pm $ 23-24 ch $ 25-34 poh $ 35-36 vr $ 37-42 dat yymmdd8. datna yymmdd8. ve $ 59-60 hodnot $ 61 vkt $ 62-63 vekdnu $ 64-67 priru $ 68-71 kriz $ 72-73 del $ 74-75 hmo $ 76-77 hru $ 78-79 hlhru $ 80-81 zad $ 82-83 plec $ 84-85 hrbet $ 86-87 ozad $ 88-89 utyp $ 90-91; tele=t*1; if tele=0 then tele = .; if tele=. then delete; otc=o*1;if otc=0 then otc = .; mat=m*1;if mat=0 then mat = .; plet=p*1;if plet=0 then plet = .; plo=po*1;if plo=0 then plo = .; plm=pm*1;if plm=0 then plm = .; chov=ch*1;if chov=0 then chov = .; pohl=poh*1;if pohl=0 then pohl = .; vrst=vr*1; if vrst=0 then vrst = .; if dat=0 then dat = .; rokm=year(dat); if rokm=0 then rokm = .; mesm= month(dat); if mesm =0 then mesm = .; denm=day(dat); if denm = 0 then denm = .; if datna=0 then datna = .; rok=year(datna); if rok=0 then rok = .; mes= month(datna); if mes =0 then mes = .; den=day(datna); if den = 0 then den = .; vekm=ve*1; if vekm=0 then vekm = .; hodn=hodnot*1;/*if hodn=0 then hodn = .;........*/ vt=vkt*1;if vt=0 then vt = .; vekt=vekdnu*1;if vekt=0 then vekt = .; prir=priru*1;if prir=0 then prir = .; kr=kriz*1;if kr=0 then kr = .; dl=del*1;if dl=0 then dl = .; hm=hmo*1; if hm=0 then hm = .; shr=hru*1;if shr=0 then shr = .; hhr=hlhru*1;if hhr=0 then hhr = .; za=zad*1;if za=0 then za = .; pl=plec*1;if pl=0 then pl = .; hrb=hrbet*1;if hrb=0 then hrb = .; oza=ozad*1;if oza=0 then oza = .; ut = utyp*1;if ut= 0 then ut = .; keep tele otc mat plet plo plm chov pohl vrst rokm mesm denm rok mes den vekm hodn vt vekt prir kr dl hm shr hhr za pl hrb oza ut; proc means; title "prumery soubor zevnejsek"; run; proc freq;tables plet; title "zevnejsek podle plemene telete";run; proc freq;tables plo; title "zevnejsek podle plemene otce";run; proc freq;tables plm; title "zevnejsek podle plemene matky";run; proc freq;tables rok; title "zevnejsek podle roku narozeni";run; proc sort data=a;by chov ; proc means noprint; by chov ; output out=pru mean=;run; /*..cetnosti a prumery podle chovu..*/ data b; set pru; n=_freq_; drop _freq_ _type_;run; proc means data=b; title "zevnejsek podle chovu";run; proc freq data =a;tables pohl; title "zevnejsek cetnosti podle pohlavi";run; proc freq data =a;tables vekm; title "zevnejsek cetnosti podle veku matky";run; proc freq data =a;tables hodn; title "zevnejsek cetnosti podle hodnotitele";run; proc sort data=a;by vrst ; proc means noprint; by vrst ; output out=pru mean=;run; /*..cetnosti a prumery podle SRO..*/ data b; set pru; n=_freq_; drop _freq_ _type_;run; proc means data=b; title "zevnejsek podle skupin vrstevniku";run; proc sort; by n;run; data b; set b; file cevr; put vrst n vekt prir kr dl hm shr hhr za pl hrb oza ut;run; proc freq; tables n; title "zevnejsek cetnosti podle skupin vrstevniku";run; data a; set a; vektm=INT(vekt/30); run; /*...cestnosti podle veku pri hodnoceni (v mesicich)...*/ proc freq; tables vektm; title 'Zevnejsek cetnosti podle veku pri hodnoceni (v mesicich)'; run; proc freq; tables kr; title 'Cetnosti podle hodnoceni vysky v krizi'; run; proc freq; tables dl; title 'Cetnosti podle hodnoceni delky tela'; run; proc freq; tables hm; title 'Cetnosti podle tridy hmotnosti'; run; proc freq; tables shr; title 'Cetnosti podle hodnoceni predni sirky hrudniku'; run; proc freq; tables hhr; title 'Cetnosti podle hodnoceni hloubky hrudniku'; run; proc freq; tables za; title 'Cetnosti podle hodnoceni sirky a delky zade'; run; proc freq; tables pl; title 'Cetnosti podle hodnoceni osvaleni plece'; run; proc freq; tables hrb; title 'Cetnosti podle hodnoceni osvaleni hrbetu a beder'; run; proc freq; tables oza; title 'Cetnosti podle hodnoceni osvaleni zadi'; run; proc freq; tables ut; title 'Cetnosti podle hodnoceni uzitkoveho typu'; run; /*...Cetnosti otcu a matek podle poctu potomklu...*/ proc sort; by otc; run; proc means noprint; by otc; output out=otc mean=; run; data otc; set otc; potomku=_freq_; run; proc freq data=otc; tables potomku; title 'Cetnosti otcu podle poctu potomku'; run; proc sort data=a; by mat; run; proc means noprint; by mat; output out=mat mean=; run; data mat; set mat; potomku=_freq_; run; proc freq data=mat; tables potomku; title 'Cetnosti matek podle poctu potomku'; run; /********************************************************************************/ /* Zapsani pochybnych udaju */ /********************************************************************************/ data b; set a; keep tele pohl; if pohl>0 and pohl<20 then delete;file chpoh;put tele pohl; /* proc print; title 'Telata s neznamym/chybnym pohlavim';run;*/ data b; set a; keep tele vrst; if vrst^=. then delete; file chvr; put tele vrst; /*proc print; title 'Telata z nezname skupiny vrstevniku';run;*/ data b; set a; keep tele vekm; if vekm>0 and vekm<10 then delete;file chvekm;put tele vekm; /*proc print; title 'Telata s neznamym/chybnym vekem matky';run;*/ data b; set a; keep tele hodn; if hodn=>0 and hodn<11 then delete;file chhodn;put tele hodn; /*proc print; title 'Telata s neznamym/chybnym hodnotitelem';run;*/ data b; set a; keep tele vekt; if vekt>159 and vekt<730 then delete;file chvekt;put tele vekt; /*run; proc print; title 'Telata hodnocena v nizkem/vysokem veku';run;*/ data b; set a; keep tele prir; if prir>290 and prir<2000 then delete;file chprir;put tele prir; /*proc print; title 'Telata s neznamym/extremnim prirustkem';run;*/ data b; set a; keep tele kr dl hm shr hhr za pl hrb oza ut; if kr>0 and kr<11 and dl>0 and dl<11 and hm>0 and hm<11 and shr>0 and shr<11 and hhr>0 and hhr<11 and za>0 and za<11 and pl>0 and pl<11 and hrb>0 and hrb<11 and oza>0 and oza<11 and ut>0 and ut<11 then delete; file chzev; put tele kr dl hm shr hhr za pl hrb oza ut; /*proc print; title 'Telata s neznamym/chybnym hodnocenim znaku zevnejsku';run;*/ /*******************************************************************************/ /*.........................................PUVOD......................................*/ data a; infile puv missover ; input /* t $ o $ m $ ; */ t $ 1-6 o $ 7-12 m $ 13-18 pt $ 19-20 po $ 21-22 pm $ 23-24 ; tele=t*1; if tele = 0 then delete;if tele = . then delete; rod1=o*1;if rod1=0 then rod1= .; rod2=m*1;if rod2=0 then rod2= .; proc means; title "prumery a rozpeti cisel v rodokmenu"; data o; set a; if tele = . then delete; if rod1=. and rod2= . then delete; /*...porovnani shodnosti oznaceni rodicu a jedince s uzitkovosti...*/ file shodj; if tele=rod1 or tele=rod2 or rod1=rod2 then do; put tele rod1 rod2; end; data b; infile shodj; input tele rod1 rod2; proc means; title "pocty shodnych oznaceni jedince a jeho rodice"; /*..porovnani stejneho jedince zda zaroven v pozici otce a matky ..*/ data o; set a; if tele= . then delete; if rod1=. then delete; rodi=rod1; telo=tele; keep telo rodi rod1; /* tele od otce */ proc sort; by rodi; data m; set a; if tele=. then delete; if rod2=. then delete; rodi=rod2; telm=tele; keep telm rodi rod2; /* tele od matky */ proc sort; by rodi; data b; merge o m; by rodi; file shodma; if rod1=rod2 then do; put telo telm rodi; end; data a; infile shodma; input telo telm rodi; /* cislo telete u otce a telete u matky */ proc means; title "pocty shodnych jedincu v postaveni otce a matky"; /*..................................................................................*/ run; /*..................TVOSOU.sas................................... */ /*................tvorba souboru pro zevnejsek */ /* navazuje na CETNOSTI */ /*.....................................1.10.2005....................*/ /*..cteni..*/ filename zev 'c:/xxx/phmas/mas107/zevn/zevn1.txt'; filename puv 'c:/xxx/phmas/mas107/zevn/pu1.txt'; /*..zapis..*/ filename zevnej 'c:/xxx/phmas/mas107/zevn/zev'; filename rod 'c:/xxx/phmas/mas107/zevn/rodz'; /*.................................................zevnejsek.........................*/ data a; infile zev missover; input t $ 1-6 o $ 7-12 m $ 13-18 p $ 19-20 po $ 21-22 pm $ 23-24 ch $ 25-34 poh $ 35-36 vr $ 37-42 dat yymmdd8. datna yymmdd8. ve $ 59-60 hodnot $ 61 vkt $ 62-63 vekdnu $ 64-67 priru $ 68-71 kriz $ 72-73 del $ 74-75 hmo $ 76-77 hru $ 78-79 hlhru $ 80-81 zad $ 82-83 plec $ 84-85 hrbet $ 86-87 ozad $ 88-89 utyp $ 90-91; tele=t*1; if tele=0 then tele = .; if tele=. then delete; otc=o*1;if otc=0 then otc = .; mat=m*1;if mat=0 then mat = .; plet=p*1;if plet=0 then plet = .; plo=po*1;if plo=0 then plo = .; plm=pm*1;if plm=0 then plm = .; chov=ch*1;if chov=0 then chov = .; pohl=poh*1;if pohl=0 then pohl = .; vrst=vr*1; if vrst=0 then vrst = .; if dat=0 then dat = .; rokm=year(dat); if rokm=0 then rokm = .; mesm= month(dat); if mesm =0 then mesm = .; denm=day(dat); if denm = 0 then denm = .; if datna=0 then datna = .; rok=year(datna); if rok=0 then rok = .; mes= month(datna); if mes =0 then mes = .; den=day(datna); if den = 0 then den = .; vekm=ve*1; if vekm=0 then vekm = .; hodn=hodnot*1;/*if hodn=0 then hodn = .;........*/ vt=vkt*1;if vt=0 then vt = .; vekt=vekdnu*1;if vekt=0 then vekt = .; prir=priru*1;if prir=0 then prir = .; kr=kriz*1;if kr=0 then kr = .; dl=del*1;if dl=0 then dl = .; hm=hmo*1; if hm=0 then hm = .; shr=hru*1;if shr=0 then shr = .; hhr=hlhru*1;if hhr=0 then hhr = .; za=zad*1;if za=0 then za = .; pl=plec*1;if pl=0 then pl = .; hrb=hrbet*1;if hrb=0 then hrb = .; oza=ozad*1;if oza=0 then oza = .; ut = utyp*1;if ut= 0 then ut = .; keep tele otc mat plet plo plm chov pohl vrst rokm mesm denm rok mes den vekm hodn vekt prir kr dl hm shr hhr za pl hrb oza ut; proc sort; by tele; data ze; set a; if tele = . then delete; /*by tele; if first.tele; kdyby tele jen jednou ? */ file zevnej ; put tele otc mat plet plo plm chov pohl vrst rokm mesm denm rok mes den vekm hodn vekt prir kr dl hm shr hhr za pl hrb oza ut; proc means; title " prumery udaje zevnejsek"; run; /*.........................................PUVOD......................................*/ data a; infile puv missover; input /* t $ o $ m $ ; */ t $ 1-6 o $ 7-12 m $ 13-18 pt $ 19-20 po $ 21-22 pm $ 23-24 ; tele=t*1; if tele=0 then delete; if tele = . then delete; rod1=o*1; if rod1=0 then rod1= .; rod2=m*1; if rod2=0 then rod2= .; pte=pt*1; if pte=0 then pte= .; pot=pt*1; if pot=0 then pot= .; pma=pt*1; if pma=0 then pma= .; keep tele rod1 rod2 pte pot pma; proc means; title " nacteny archivni soubor puvodu"; proc sort; by tele; data b; set a; by tele; if first.tele; proc means; title " nacteny archivni soubor puvodu, kazde tele pouze jednou"; /*...............spojeni puvodu podle telat - kontrola telat v puvodech ........*/ data a; merge b ze; by tele; keep tele rod1 rod2 o m pt po pm ; o=otc; m=mat; pt = pte; if pt = . then pt=plet; po = pot; if po = . then po=plo; pm = pma; if pm = . then pm=plm; proc means; title "spojeni puvodu podle telat"; /*...............kontrola pridani do puvodu - matky......................... */ data c; set ze; tele= mat; plet= plm; keep tele plet; proc sort; by tele; data d; set c; by tele; if first.tele; data b; merge a d; by tele; keep tele rod1 rod2 o m pt po pm ; if pt=. then pt= plet; proc means; title "kontrola pridani do puvodu - matky"; /*....................kontrola pridani do puvodu - otci ..............*/ data c; set ze; tele= otc; plet= plo; keep tele plet; proc sort; by tele; data d; set c; by tele; if first.tele; data a; merge b d; by tele; keep tele rod1 rod2 o m pt po pm ; if pt=. then pt= plet; proc means; title "nahrubo sestavene nove archivni puvody vcetne kontroly otcu"; /*........doplneni rodicu v puvodu ..........*/ data c; set a; if o=. and rod1 ne . and rod1 ne m then o=rod1; else if o=. and rod2 ne . and rod2 ne m then o=rod2; if m=. and rod1 ne . and rod1 ne o then m=rod1; else if m=. and rod2 ne . and rod2 ne o then m=rod2; file rod; put tele o m pt po pm ; proc means; title "opravene archivni puvody"; /*..................................................................................*/ run; /*..................UPRAVSO.sas................................... */ /*................upravuje soubory, shlukuje tridy veku, pohlavi */ /* zavadi parametry L polynomu */ /* zavadi heterozi a doplnuje do datoveho souboru */ /* navazuje na TVOSOU */ /*.....................................3.10.2005 ................*/ /*..cte..*/ filename zevnej 'c:/xxx/phmas/mas107/zevn/zev'; filename rod 'c:/xxx/phmas/mas107/zevn/rodz'; /*..zapisuje..*/ filename rodok 'c:/xxx/phmas/mas107/zevn/rodokz'; filename uzitk 'c:/xxx/phmas/mas107/zevn/uzitkz'; /*...........................................cteni.souboru............................*/ data zev; infile zevnej missover; input tele otc mat plet plo plm chov pohl vrst rokm mesm denm rok mes den vekm hodn vekt prir kr dl hm shr hhr za pl hrb oza ut; proc means; title "cteni souboru zevnejsek"; /*.........................uprava zevnejsku....................................*/ data a; set zev; /*....................uprava pohlavi. do trid...........................................*/ if pohl=1 or pohl=3 or pohl=5 or pohl=7 then pohl=2; /* bycek */ if pohl=9 or pohl=11 or pohl=13 then pohl=8; /* jalovicka*/ if pohl=6 or pohl=17 or pohl=18 or pohl=19 then pohl=4; /* vicecetny porod bycek */ if pohl=12 or pohl=15 or pohl=16 then pohl=10;/* vicecetny porod jalovicka*/ if pohl=14 then delete; /*if vekm=1 then vekm=4; prijemkyne zarodku */ /*....................uprava vekmatky do trid .........+ plemena........................*/ if vekm=2 then do; plm=5; vekm=8; end; if vekm=6 or vekm=7 then vekm=5; if vekm=9 then vekm=8; if plm= . then plm = 5; /* neznama matka plemeno 5 */ /*..................dosazeni koeficientu pro heterozi.telete a matky ...................*/ if plet=1 then het=0; /* ...telata */ if plet=14 then het=1; if plet=15 then het=0.5; if plet=16 then het=0; if plet=2 then het=0.5; if plet=3 then het=1; if plet=4 then het=0.5; if plet=5 then het=0; if plet=17 then het=1; if plet=18 then het=0.5; if plet=19 then het=0; if plet=30 then het=0.5; if plet=31 then het=1; if plet=32 then het=0.5; if plet=33 then het=0; if plet=23 then het=1; if plet=24 then het=0.5; if plet=25 then het=0; if plet=45 then het=1; if plet=46 then het=0.5; if plet=47 then het=0; if plet=42 then het=1; if plet=43 then het=0.5; if plet=44 then het=0; if plet=6 then het=0; if plet=7 then het=0; if plet=8 then het=0; if plet=9 then het=0; if plet=10 then het=0.5; if plet=11 then het=1; if plet=12 then het=0.5; if plet=13 then het=0; if plet=34 then het=0.5; if plet=35 then het=1; if plet=36 then het=0.5; if plet=37 then het=0; if plet=26 then het=0.5; if plet=27 then het=1; if plet=28 then het=0.5; if plet=29 then het=0; if plet=20 then het=1; if plet=21 then het=0.5; if plet=22 then het=0; if plet=38 then het=0.5; if plet=39 then het=1; if plet=40 then het=0.5; if plet=41 then het=0; if plet=48 then het=1; if plet=49 then het=0.5; if plet=50 then het=0; proc sort; by tele; /*........................doplneny paramatry L polynomu.............................*/ data leg; set a; vmin = 160; vmax = 730; sv = 2*((vekt-vmin)/(vmax-vmin))-1; p0 = 1; b0=1; p1 = sv; b1=p1*sqrt(3/2)/sqrt(1/2); p2 = 0.5*(3*sv*sv-1); b2=p2*sqrt(5/2)/sqrt(1/2); /*...................................................................................*/ proc means ; title "prumery upravene udaje"; proc freq; tables pohl; title "cetnosti podle pohlavi"; proc freq; tables vekm; title "cetnosti podle trid veku matky"; proc freq; tables het; title "cetnosti podle heteroz. telat"; /********************************************************************/ /* PRIPRAVA PARAMETROVEHO SOUBORU PRO REMLF90 */ /* Odstraneni malopocetnych skupin vrstevniku */ /* a otcu s pouze 1 potomkem */ /********************************************************************/ /*%MACRO vrstot; %do i=1 %to 10 %by 1;*/ /*... Vyhozeni malopocetnych SRO n=1 ...*/ /* proc sort; by vrst; run; proc means noprint; by vrst; output out=vrst mean=; run; data vrst; set vrst; n=_freq_; keep vrst n; if n<2 then delete; run; data leg; merge leg vrst; by vrst; if n=. then delete; drop n; run;*/ /*... Vyhozeni otcu s pouze 1 potomkem ...*/ /* proc sort; by otc; run; proc means noprint; by otc; output out=ot mean=; run; data ot; set ot; n=_freq_; keep otc n; if n<2 then delete; run; data leg; merge leg ot; by otc; if n=. then delete; drop n; run; %end; %mend; %vrstot;*/ /********************************************************************/ /* KONEC PRIPRAVY PARAMETROVEHO SOUBORU PRO REMLF90 */ /********************************************************************/ data b; set leg; /*by tele; if first.tele; kdyby tele jen jednou ? */ keep tele otc mat plet plo plm pohl vrst rokm mesm denm rok mes den vekm hodn vekt prir kr dl hm shr hhr za pl hrb oza ut het b0 b1 b2; file uzitk; put tele otc mat plet plo plm pohl vrst rokm mesm denm rok mes den vekm hodn vekt prir kr dl hm shr hhr za pl hrb oza ut het b0 b1 b2; proc means; title "prumery konecny upraveny soubor"; run; /*...............................uprava souboru puvodu.................................*/ data pu; infile rod missover; input tele o m pt po pm ; proc sort; by tele; proc means; title "nactene puvody"; data pu; set pu; by tele; if first.tele; proc means; title "vyhozena opakujici se tela"; data tele; /*....................tele..........................*/ set b; keep tele plet; proc sort; by tele; data a; merge pu tele; by tele; if pt=. then pt=plet; keep tele o m pt po pm; proc means; title "pripojena telata s uzitkovosti"; data puv; set a; by tele; if first.tele; file rodok; put tele o m pt po pm; proc means; title "cely nacteny soubor puvodu"; /*..................................................................................*/ run; /*..................GLMAS......................................... */ /*................vypocet glm pro pevne efekty rust............. */ /* zevnejsek masneho skotu */ /* navazuje na UPRAVSO */ /*.....................................24.9.2005....................*/ filename rodok 'c:/xxx/phmas/mas107/zevn/rodokz'; filename uzitk 'c:/xxx/phmas/mas107/zevn/uzitkz'; /*...........................................cteni.souboru............................*/ data uzit; infile uzitk missover; input tele otc mat plet plo plm pohl vrst rokm mesm denm rok mes den vekm hodn vekt prir kr dl hm shr hhr za pl hrb oza ut het b0 b1 b2; proc means; title "prumery uzikovosti"; proc sort; by vrst; /*..................... efekty spolecne pro vsechny vlastnosti .........*/ proc glm; class plet; model kr dl hm shr hhr za pl hrb oza ut = plet; /* .......doplnit ....*/ run; /*..................................................................................*/ run; /*..................SESTROD................................... */ /*................doplnuje rodokmen.......................... */ /* navazuje na UPRAVSO */ /*.....................................3.10.2005 ..............*/ /*..cte..*/ filename rodok 'c:/xxx/phmas/mas107/zevn/rodokz'; filename uzitk 'c:/xxx/phmas/mas107/zevn/uzitkz'; /*..zapisuje..*/ filename pribuz 'c:/xxx/phmas/mas107/zevn/pribz'; /*....................................................cteni.souboru uzitkovost.*/ data uzitk; infile uzitk missover; input tele otc mat plet plo plm pohl vrst rokm mesm denm rok mes den vekm hodn vekt prir kr dl hm shr hhr za pl hrb oza ut het b0 b1 b2; proc means; title "cteni souboru uzitkovost"; run; proc sort; by tele; run; /*.......................................................................tele..*/ data jed; set uzitk; by tele; if first.tele;keep tele; run; /*........................................................cteni.souboru puvodu.*/ data rodok; infile rodok missover; input tele o m pt po pm; proc sort; by tele; /* rodok : tele o m pt po pm*/ proc means; title "vstupni rodokmen"; /*............................................... kompletni puvodni rodokmen....*/ data rod; set rodok; by tele; if first.tele; /*....................... zadani makra predci pridani N generaci predku......*/ %macro predci; %do i=1 %to 3 %by 1; data d; merge jed(in=prv) rod; by tele ; if prv; /* tele o m pt po pm*/ data a; set d; keep tele ; data b; set d; keep tele ; tele= o; data c; set d; keep tele ; tele= m; data tele; set a b c; if tele = . then delete; proc sort; by tele; proc means; title "sloupec jedincu podle uzitkovosti krok &i"; data jed; set tele; by tele; if first.tele; proc means; title "sloupec jedincu podle uzitkovosti vyhozena opakovani jedincu krok &i"; %end; %mend predci; %predci; /*........................doplneni rodokmenu uvnitr N generaci opakovano ??krat?....*/ data pridat; set d; %macro dopln; %do i=1 %to 4 %by 1; data a; set pridat; keep tele ; data b; set pridat; keep tele ; tele= o; data c; set pridat; keep tele ; tele= m; data tele; set a b c; if tele = . then delete; proc sort; by tele; proc means; title "sloupec jedincu na pridavani krok &i"; data jed; set tele; by tele; if first.tele; proc means; title "sloupec jedincu na pridavani vyhozena opakovani jedincu krok &i"; data d; merge jed(in=prid) pridat; by tele ; if prid; data pridat; set d; proc means; title "puvody po pridavani v ramci generaci krok &i"; %end; %mend dopln; %dopln; /*.............................makro prirazovani plemen do puvodu. opakovano ??krat?*/ %macro plemen; %do i=1 %to 5 %by 1; data c; set d; if pt=. and po=. and pm= . then delete; proc means; title "vyhozeni jedincu zcela bez plemen"; /*........................doplneni plemen v puvodech.u otcu.- opakovana CTENI...*/ /*...................................cast souboru, kdy neco o plemenech znamo...*/ data a; set c; if po=. and pt=1 then po=1; else if po=. and pt=16 then po=16; else if po=. and pt=14 then po=16; else if po=. and pt=15 then po=16; else if po=. and pt=5 then po=5; else if po=. and pt=3 then po=5; else if po=. and pt=4 then po=5; else if po=. and pt=2 then po=13; else if po=. and pt=13 then po=13; else if po=. and pt=19 then po=19; else if po=. and pt=17 then po=19; else if po=. and pt=18 then po=19; else if po=. and pt=33 then po=33; else if po=. and pt=30 then po=1; else if po=. and pt=31 then po=33; else if po=. and pt=32 then po=33; else if po=. and pt=25 then po=25; else if po=. and pt=23 then po=25; else if po=. and pt=24 then po=25; else if po=. and pt=47 then po=47; else if po=. and pt=45 then po=47; else if po=. and pt=46 then po=47; else if po=. and pt=44 then po=44; else if po=. and pt=42 then po=44; else if po=. and pt=43 then po=44; else if po=. and pt=9 then po=9; else if po=. and pt=6 then po=9; else if po=. and pt=7 then po=9; else if po=. and pt=8 then po=9; else if po=. and pt=10 then po=9; else if po=. and pt=11 then po=13; else if po=. and pt=12 then po=13; else if po=. and pt=37 then po=37; else if po=. and pt=34 then po=5; else if po=. and pt=35 then po=37; else if po=. and pt=36 then po=37; else if po=. and pt=29 then po=29; else if po=. and pt=26 then po=5; else if po=. and pt=27 then po=29; else if po=. and pt=28 then po=29; else if po=. and pt=22 then po=22; else if po=. and pt=20 then po=22; else if po=. and pt=21 then po=22; else if po=. and pt=41 then po=41; else if po=. and pt=38 then po=5; else if po=. and pt=39 then po=41; else if po=. and pt=40 then po=41; else if po=. and pt=50 then po=50; else if po=. and pt=48 then po=50; else if po=. and pt=49 then po=50; /*else if po= . then po= 5;*/ proc means; title "DOPLNENI PLEMEN U OTCU krok &i"; data b; set a; /*.........................................doplneni plemen v puvodech.u telat...*/ if pt=. and po=1 then pt=1; else if pt=. and po=16 and pm=16 then pt=16; else if pt=. and po=16 and pm=14 then pt=15; else if pt=. and po=16 and pm=15 then pt=16; else if pt=. and po=16 then pt=14; else if pt=. and po=5 and pm=2 then pt=3; else if pt=. and po=5 and pm=3 then pt=4; else if pt=. and po=5 and pm=4 then pt=5; else if pt=. and po=5 then pt=3; else if pt=. and po=13 and pm=13 then pt=13; else if pt=. and po=13 and pm= 5 then pt=11; else if pt=. and po=13 and pm=4 then pt=11; else if pt=. and po=13 and pm=3 then pt=11; else if pt=. and po=13 and pm=6 then pt=12; else if pt=. and po=13 and pm=7 then pt=12; else if pt=. and po=13 and pm=8 then pt=13; else if pt=. and po=13 and pm=9 then pt=13; else if pt=. and po=13 and pm=10 then pt=12; else if pt=. and po=13 and pm=11 then pt=12; else if pt=. and po=13 and pm=12 then pt=13; else if pt=. and po=13 then pt=11; else if pt=. and po=19 and pm=19 then pt=19; else if pt=. and po=19 and pm=17 then pt=18; else if pt=. and po=19 and pm=18 then pt=19; else if pt=. and po=19 then pt=17; else if pt=. and po=33 and pm=33 then pt=33; else if pt=. and po=33 and pm=30 then pt=31; else if pt=. and po=33 and pm=31 then pt=32; else if pt=. and po=33 and pm=32 then pt=33; else if pt=. and po=33 then pt=30; else if pt=. and po=25 and pm=25 then pt=25; else if pt=. and po=25 and pm=23 then pt=24; else if pt=. and po=25 and pm=24 then pt=25; else if pt=. and po=25 then pt=23; else if pt=. and po=47 and pm=47 then pt=47; else if pt=. and po=47 and pm=45 then pt=46; else if pt=. and po=47 and pm=46 then pt=47; else if pt=. and po=47 then pt=45; else if pt=. and po=44 and pm=44 then pt=44; else if pt=. and po=44 and pm=42 then pt=43; else if pt=. and po=44 and pm=43 then pt=44; else if pt=. and po=44 then pt=42; else if pt=. and po=9 and pm=9 then pt=9; else if pt=. and po=9 and pm=7 then pt=8; else if pt=. and po=9 and pm=8 then pt=9; else if pt=. and po=9 then pt=7; else if pt=. and po=37 and pm=34 then pt=35; else if pt=. and po=37 and pm=37 then pt=37; else if pt=. and po=37 and pm=35 then pt=36; else if pt=. and po=37 and pm=36 then pt=37; else if pt=. and po=37 then pt=35; else if pt=. and po=29 and pm=29 then pt=29; else if pt=. and po=29 and pm=26 then pt=27; else if pt=. and po=29 and pm=27 then pt=28; else if pt=. and po=29 and pm=28 then pt=29; else if pt=. and po=29 then pt=27; else if pt=. and po=22 and pm=22 then pt=22; else if pt=. and po=22 and pm=20 then pt=21; else if pt=. and po=22 and pm=21 then pt=22; else if pt=. and po=22 then pt=20; else if pt=. and po=41 and pm=41 then pt=41; else if pt=. and po=41 and pm=38 then pt=39; else if pt=. and po=41 and pm=39 then pt=40; else if pt=. and po=41 and pm=40 then pt=41; else if pt=. and po=41 then pt=39; else if pt=. and po=50 and pm=50 then pt=50; else if pt=. and po=50 and pm=48 then pt=49; else if pt=. and po=50 and pm=49 then pt=50; else if pt=. and po=50 then pt=48; /* else if pt= . then pt= 5;*/ proc means; title "DOPLNENI PLEMEN U TELAT krok &i"; data a; set b; /*.........................................doplneni plemen v puvodech.u matek...*/ if pm=. and pt=1 then pm=1; else if pm=. and po=16 and pt=16 then pm=16; else if pm=. and po=16 and pt=14 then pm=5; else if pm=. and po=16 and pt=15 then pm=14; else if pm=. and po=16 then pm=5; else if pm=. and po=5 and pt=2 then pm=2; else if pm=. and po=5 and pt=3 then pm=2; else if pm=. and po=5 and pt=4 then pm=3; else if pm=. and po=5 then pm=5; else if pm=. and po=13 and pt=13 then pm=13; else if pm=. and po=13 and pt= 5 then do; pm= 5; pt=11; end; else if pm=. and po=13 and pt=4 then do; pm= 4; pt=11; end; else if pm=. and po=13 and pt=3 then do; pm= 3; pt=11; end; else if pm=. and po=13 and pt=11 then pm=5; else if pm=. and po=13 and pt=12 then pm=11; else if pm=. and po=13 then pm=5; else if pm=. and po=19 and pt=19 then pm=19; else if pm=. and po=19 and pt=17 then pm=5; else if pm=. and po=19 and pt=18 then pm=17; else if pm=. and po=19 then pm=5; else if pm=. and po=33 and pt=33 then pm=33; else if pm=. and po=33 and pt=30 then pm=5; else if pm=. and po=33 and pt=31 then pm=5; else if pm=. and po=33 and pt=32 then pm=31; else if pm=. and po=33 then pm=5; else if pm=. and po=25 and pt=25 then pm=25; else if pm=. and po=25 and pt=23 then pm=5; else if pm=. and po=25 and pt=24 then pm=23; else if pm=. and po=25 then pm=5; else if pm=. and po=47 and pt=47 then pm=47; else if pm=. and po=47 and pt=45 then pm=5; else if pm=. and po=47 and pt=46 then pm=45; else if pm=. and po=47 then pm=5; else if pm=. and po=44 and pt=44 then pm=44; else if pm=. and po=44 and pt=42 then pm=5; else if pm=. and po=44 and pt=43 then pm=42; else if pm=. and po=44 then pm=5; else if pm=. and po=9 and pt=9 then pm=9; else if pm=. and po=9 and pt=6 then pm=5; else if pm=. and po=9 and pt=10 then pm=9; else if pm=. and po=9 and pt=7 then pm=5; else if pm=. and po=9 and pt=8 then pm=7; else if pm=. and po=9 then pm=5; else if pm=. and po=37 and pt=37 then pm=37; else if pm=. and po=37 and pt=34 then pm=5; else if pm=. and po=37 and pt=35 then pm=5; else if pm=. and po=37 and pt=36 then pm=35; else if pm=. and po=37 then pm=5; else if pm=. and po=29 and pt=29 then pm=29; else if pm=. and po=29 and pt=26 then pm=5; else if pm=. and po=29 and pt=27 then pm=26; else if pm=. and po=29 and pt=28 then pm=27; else if pm=. and po=29 then pm=5; else if pm=. and po=22 and pt=22 then pm=22; else if pm=. and po=22 and pt=20 then pm=5; else if pm=. and po=22 and pt=21 then pm=20; else if pm=. and po=22 then pm=5; else if pm=. and po=41 and pt=41 then pm=41; else if pm=. and po=41 and pt=38 then pm=5; else if pm=. and po=41 and pt=39 then pm=38; else if pm=. and po=41 and pt=40 then pm=39; else if pm=. and po=41 then pm=5; else if pm=. and po=50 and pt=50 then pm=50; else if pm=. and po=50 and pt=48 then pm=5; else if pm=. and po=50 and pt=49 then pm=48; else if pm=. and po=50 then pm=5; else if pm=. then pm= 5; proc means; title "DOPLNENI PLEMEN U MATEK krok &i"; /*.................................................doplnen puvod, Dalsi CTENI...*/ data rodok; set a; data a; set rodok; keep tele plt; plt=pt; data b; set rodok; keep tele plt; tele=o;plt=po; data c; set rodok; keep tele plt; tele=m;plt=pm; data d; set a b c;if tele=. then delete; proc sort; by tele; proc means; title "sloupec doplnenych plemen rodokmenu krok &i"; data a; set d; by tele; if first.tele; proc means; title "sloupec doplnenych plemen po vyhozeni opakovanych jedincu krok &i"; data b; merge a rodok; by tele; proc means noprint; output out=pru mean=; data a; set pru; n=_freq_; proc means data=b; title "spojeni sloupce s rodokmenem s plemeny krok &i"; data c; set b; if pt=. then pt=plt; keep tele o1 m1 pt1 po1 pm1; o1=o;m1=m;pt1=pt;po1=po;pm1=pm; data rodok; merge c pridat; by tele; if o=. then o=o1;if m=. then m=m1; if pt=. then pt=pt1;if po=. then po=po1;if pm=. then pm=pm1; keep tele o m pt po pm; data d; set rodok; by tele; if first.tele; if tele=. then delete; proc means; title "DOPLNOVANI UKONCENO krok &i"; %end; %mend plemen; /*...........................................konec opakujiciho se bloku.......*/ %plemen; data rodok; set d; if pt=. then pt=5; if po=. then po=5; if pm=. then pm=5; proc means; title "dosazeni pt=5"; /* .................. doplneni plemen v rodokmenu (bez uzitkovosti) ukonceno.....*/ run; /*...................................prirazeni skupin.a koeficientu pro skupiny..*/ data prib; set rodok; if o=. and m=. then koef=3; else if o=. then koef=2; else if m=. then koef=2; else koef=1; proc means; title "cely rodokmen s koeficienty"; data a; set prib; /* slucovani skupin rodicu */ /* ........slucovaNI SKUPIN ...................................................*/ if po = 2 then po = 5; if po = 4 then po = 5; if po = 9 then po = 11; if po = 12 then po = 11; if po = 11 then po = 13; if po = 32 then po = 31; if po = 31 then po = 33; if po = 35 then po = 37; if po = 39 then po = 41; if po = 42 then po = 44; if pm = 4 then pm = 5; if pm = 6 then pm = 11; if pm = 12 then pm = 11; if pm = 17 then pm = 19; if pm = 20 then pm = 22; if pm = 21 then pm = 22; if pm = 26 then pm = 27; if pm = 28 then pm = 27; if pm = 32 then pm = 31; if pm = 31 then pm = 33; if pm = 34 then pm = 35; if pm = 36 then pm = 35; if pm = 35 then pm = 37; if pm = 39 then pm = 38; if pm = 40 then pm = 38; if pm = 42 then pm = 44; if pm = 43 then pm = 44; if pm = 45 then pm = 47; if pm = 46 then pm = 47; data prib;set a; /*.. skupiny neznamych rodicu..*/ if o=. then o=2000000 + po; if m=. then m=2000000 + pm; keep tele o m koef pt po pm; file pribuz; put tele o m koef pt po pm; proc means; title "pridani koeficientu a skupin plemen"; proc freq; tables koef; title "cetnosti podle koeficientu 1 oba rod znami, 2 jeden neznam, 3 oba neznami"; /*.......pocty ve skupinach neznamych rodicu...*/ data a; set prib; if o le 2000000 then delete; proc freq; tables o; title "pocty ve skupinach neznamych otcu"; data a; set prib; if m le 2000000 then delete; proc freq; tables m; title "pocty ve skupinach neznamych matek"; /*............................................konec..............................*/ run; /*..................PRECIS.....................................*/ /*................precislovava urovni efektu..................... */ /* navazuje na SESTROD */ /*.....................................24.9.2005.........................*/ /*..cte..*/ filename uzitk 'c:/xxx/phmas/mas107/zevn/uzitkz'; filename pribuz 'c:/xxx/phmas/mas107/zevn/pribz'; /*..zapisuje..*/ filename uz 'c:/xxx/phmas/mas107/zevn/uz'; filename matpri 'c:/xxx/phmas/mas107/zevn/matpri'; filename kodje 'c:/xxx/phmas/mas107/zevn/kodjed'; filename kodpoh 'c:/xxx/phmas/mas107/zevn/kodpoh'; filename kodvr 'c:/xxx/phmas/mas107/zevn/kodvr'; filename kodvekm 'c:/xxx/phmas/mas107/zevn/kodvekm'; filename kodhod 'c:/xxx/phmas/mas107/zevn/kodhod'; /*........................................................cteni.souboru puvodu.*/ data prib; infile pribuz missover; input tele o m koef pt po pm ; proc sort; by tele; proc means; title "vstupni rodokmen"; data a; set prib; keep jed; jed=tele; data b; set prib; keep jed; jed= o; data c; set prib; keep jed; jed=m; data kodje; set a b c; proc sort; by jed; data a; set kodje; by jed; if first.jed; if jed=. then delete; data a; set a; keep jed kod; kod=_n_; /* zapis kodu jedince na disk */ file kodje; put jed kod; data c; set a;tele=jed; proc means; title "jedinec, otec, matka spolecne"; data b; merge c prib(in=tel); by tele; if tel; tele=kod; keep tele o m koef pt po pm; proc sort; by o; data c; set a; o=jed; proc sort; by o; data kodje; merge c b(in=otc); by o; if otc; o=kod; keep tele o m koef pt po pm; proc sort; by m; data c; set a; m=jed; proc sort; by m; data b; merge c kodje(in=mat); by m; if mat; m=kod; keep tele o m koef pt po pm; file matpri; put tele o m koef pt po pm; proc means; title "precislovany rodokmen vcetne skupin neznamych rodicu"; /*....................................................cteni.souboru uzitkovost.*/ data uzitk; infile uzitk missover; input tele otc mat plet plo plm pohl vrst rokm mesm denm rok mes den vekm hodn vekt prir kr dl hm shr hhr za pl hrb oza ut het b0 b1 b2; jed=tele; proc sort; by jed; proc means; title "vstup uzitkovosti do precislovani"; /*.......................................................................tele..*/ data tele; merge uzitk(in=ctel) a; by jed; if ctel; tele=kod; drop kod jed ; proc means; title "kody telat s uzitkovosti"; /*...................................................................pohlavi..*/ data poh; set tele; proc sort; by pohl; data b; set poh; by pohl; if first.pohl; data b; set b; kod=_n_; keep pohl kod; file kodpoh; put pohl kod ; /* zapis kodu pohlavi na disk */ proc freq; tables pohl; title "cetnosti podle pohlavi"; proc means; title "prumery podle pohlavi"; data a; merge poh(in=pohla) b; by pohl; if pohla; pohl=kod; drop kod; proc means; title "uzitkovost po precislovani pohlavi"; /*.......................................................................vrst ..*/ data vrpp; set a; proc sort; by vrst; data b; set vrpp; by vrst; if first.vrst; /*if vrst=. then delete; */ data b; set b; kod=_n_; keep vrst kod; file kodvr; put vrst kod; /* zapis kodu vrst na disk */ proc means; title "skupiny vrstevniku pro zevnejsek"; data a; merge vrpp(in=vrp) b; by vrst; if vrp; vrst=kod; drop kod; proc means; title "uzitkovost po precislovani vrstevniku"; /*.......................................................................hodnotitel.*/ data vrna; set a; proc sort; by hodn; data b; set vrna; by hodn; if first.hodn; /*if hodn=. then delete; */ data b; set b; kod=_n_; keep hodn kod; file kodhod; put hodn kod; /* zapis kodu hodnotitele na disk */ proc means; title "hodnotitel"; data a; merge vrna(in=vrn) b; by hodn; if vrn; hodn=kod; drop kod; proc means; title "uzitkovost po precislovani hodnotitele"; /*.....................................................................vekmatky.*/ data vema; set a; proc sort; by vekm; data b; set vema; by vekm; if first.vekm; data b; set b; kod=_n_; keep vekm kod; file kodvekm; put vekm kod; /* zapis kodu vek matky na disk */ proc freq; tables vekm; title "cetnosti podle veku matek"; proc means; title "prumery podle veku matek"; data a; merge vema(in=vek) b; by vekm; if vek; vekm=kod; drop kod; proc means; title "uzitkovost po precislovani veku matky"; /*..................................................................cely soubor.*/ data a; set a; if kr=. then kr=0; if dl=. then dl=0; if hm=. then hm=0; if shr=. then shr=0; if hhr=. then hhr=0; if za=. then za=0; if pl=. then pl=0; if hrb=. then hrb=0; if oza=. then oza=0; if ut=. then ut=0; run; data b; set a; file uz; put tele otc mat plet plo plm pohl vrst rokm mesm denm rok mes den vekm hodn vekt prir kr dl hm shr hhr za pl hrb oza ut het b0 b1 b2; proc means; title "zapis konecneho upraveneho souboru"; data b; infile uz missover; input tele otc mat plet plo plm pohl vrst rokm mesm denm rok mes den vekm hodn vekt prir kr dl hm shr hhr za pl hrb oza ut het b0 b1 b2; proc means; title "kontrola konecny soubor uzitkovosti pro vypocty"; /*............................................konec..............................*/ run;