dm output 'clear'; dm log 'clear'; option fullstimer; option sortsize=max; * doplneni rodicu ke kravam s uzitkovosti ); data parC.rod_cely; set parC.rod_cely; ot = '500'!!otec; run; data vz_c; merge parC.vz_c (in = b) parC.rod; by cislo; if b; drop count -- v; ot = otec; run; data vz_c; set vz_c; otec = substr(otec,4); run; /* krávy z vychoziho vzorku + jejich rodice + jejich rodice*/ proc sql; create table becka as select distinct cislo, otec, matka from vz_c; alter table becka add gen num; update becka set gen = 5; /* gen = 5 => kravy s uzitkovosti */ create table matky_1 as select distinct matka as cislo from becka; create table becka_1m as select distinct matky_1.cislo, otec, matka from matky_1, parC.rod_cely where matky_1.cislo = rod_cely.cislo; alter table becka_1m add gen num; update becka_1m set gen = 4; /* gen = 4 => matky + otci krav s uzitkovosti (1. generace rodicu)*/ create table otci_1 as select distinct otec as cislo from becka; create table becka_1o as select distinct otci_1.cislo, otec, matka from otci_1, parC.rod_cely where otci_1.cislo = rod_cely.cislo; alter table becka_1o add gen num; update becka_1o set gen = 4; /* gen = 4 => matky + otci krav s uzitkovosti (1. generace rodicu)*/ create table b as select * from becka_1m union select * from becka_1o; quit; ************************************************************; proc sort data=becka_1m; by cislo; proc sort data=becka_1o; by cislo; run; data b_b1; merge becka (in = in_1) becka_1m (in = in_2); by cislo; if in_1 = 0 and in_2 = 1; proc sort nodup data = b_b1; by cislo; run; data b_b2; merge becka (in = in_1) becka_1o (in = in_2); by cislo; if in_1 = 0 and in_2 = 1; proc sort nodup data = b_b2; by cislo; run; proc freq data = b_b1 noprint; tables cislo/out=fr_bb1; run; data fr_bb1; set fr_bb1; if count = 1 then delete; keep cislo count; run; data b_b1; merge b_b1 (in = in_1) fr_bb1 (in = in_2); by cislo; if count > 1 then do otec = '500000000'; matka = '000000000'; end; drop count; run; proc sort nodup data = b_b1; by cislo; run; proc freq data = b_b2 noprint; tables cislo/out=fr_bb2; run; data fr_bb2; set fr_bb2; if count = 1 then delete; run; data b_b2; merge b_b2 (in = in_1) fr_bb2 (in = in_2); by cislo; if count > 1 then do otec = '500000000'; matka = '000000000'; end; drop count; proc sort nodup data = b_b2; by cislo; run; data nac; set becka b_b1 b_b2; by cislo; drop gen; run; proc sort nodup data=nac; by cislo; proc freq data = nac noprint; tables cislo/out=fr_nac; run; data fr_nac; set fr_nac; if count = 1 then delete; run; data nac; merge nac (in = in_1) fr_nac (in = in_2); by cislo; if count > 1 then do otec = '500000000'; matka = '000000000'; end; proc sort nodup data = nac; by cislo; run; ************** 22222222222222222222222222 ***************; proc sql; create table matky_2 as select distinct matka as cislo from b where gen = 4; create table becka_2m as select distinct matky_2.cislo, otec, matka from matky_2, parC.rod_cely where matky_2.cislo = rod_cely.cislo; alter table becka_2m add gen num; update becka_2m set gen = 3; /* gen = 3 => matky + otci rodicu krav uzitkovosti, (2. generace predku)*/ create table otci_2 as select distinct otec as cislo from b where gen = 4; create table becka_2o as select distinct otci_2.cislo, otec, matka from otci_2, parC.rod_cely where otci_2.cislo = rod_cely.cislo; alter table becka_2o add gen num; update becka_2o set gen = 3; /* gen = 3 => matky + otci rodicu krav uzitkovosti, (2. generace predku)*/ create table b1 as select * from becka_2m union select * from becka_2o; quit; *************************************************; proc sort nodup data=becka_2m; by cislo; proc sort data=becka_2o; by cislo; run; data b_b3; merge nac (in = in_1) becka_2m (in = in_2); by cislo; if in_1 = 0 and in_2 = 1; keep cislo otec matka gen; proc sort nodup data = b_b3; by cislo; run; data b_b4; merge nac (in = in_1) becka_2o (in = in_2); by cislo; if in_1 = 0 and in_2 = 1; keep cislo otec matka gen; proc sort nodup data = b_b4; by cislo; run; proc freq data = b_b3 noprint; tables cislo/out=fr_bb3; run; data fr_bb3; set fr_bb3; if count = 1 then delete; keep cislo count; run; data b_b3; merge b_b3 (in = in_1) fr_bb3 (in = in_2); by cislo; if count > 1 then do otec = '500000000'; matka = '000000000'; end; run; proc sort nodup data = b_b3; by cislo; run; proc freq data = b_b4 noprint; tables cislo/out=fr_bb4; run; data fr_bb4; set fr_bb4; if count = 1 then delete; run; data b_b4; merge b_b4 (in = in_1) fr_bb4 (in = in_2); by cislo; if count > 1 then do otec = '500000000'; matka = '000000000'; end; proc sort nodup data = b_b4; by cislo; run; data nac; set nac b_b3 b_b4; by cislo; drop gen; run; proc sort nodup data=nac; by cislo; proc freq data = nac noprint; tables cislo/out=fr_nac; run; data fr_nac; set fr_nac; if count = 1 then delete; run; data nac; merge nac (in = in_1) fr_nac (in = in_2); by cislo; if count > 1 then do otec = '500000000'; matka = '000000000'; end; proc sort nodup data = nac; by cislo; run; ********************** 333333333333333 ***********************; proc sql; create table matky_3 as select distinct matka as cislo from b1 where gen = 3; create table becka_3m as select distinct matky_3.cislo, otec, matka from matky_3, parC.rod_cely where matky_3.cislo = rod_cely.cislo; alter table becka_3m add gen num; update becka_3m set gen = 2; /* gen = 2 => matky + otci 2. generace rodicu krav uzitkovosti (3. generace rodicu)*/ create table otci_3 as select distinct otec as cislo from b1 where gen = 3; create table becka_3o as select distinct otci_3.cislo, otec, matka from otci_3, parC.rod_cely where otci_3.cislo = rod_cely.cislo; alter table becka_3o add gen num; update becka_3o set gen = 2; /* gen = 2 => matky + otci 2. generace rodicu krav uzitkovosti (3. generace rodicu)*/ create table b2 as select * from becka_3m union select * from becka_3o; quit; *****************************************************; proc sort nodup data=becka_3m; by cislo; proc sort nodup data=becka_3o; by cislo; run; data b_b5; merge nac (in = in_1) becka_3m (in = in_2); by cislo; if in_1 = 0 and in_2 = 1; keep cislo otec matka gen; proc sort nodup data = b_b5; by cislo; run; data b_b6; merge nac (in = in_1) becka_3o (in = in_2); by cislo; if in_1 = 0 and in_2 = 1; keep cislo otec matka gen; proc sort nodup data = b_b6; by cislo; run; proc freq data = b_b5 noprint; tables cislo/out=fr_bb5; run; data fr_bb5; set fr_bb5; if count = 1 then delete; keep cislo count; run; data b_b5; merge b_b5 (in = in_1) fr_bb5 (in = in_2); by cislo; if count > 1 then do otec = '500000000'; matka = '000000000'; end; run; proc sort nodup data = b_b5; by cislo; run; proc freq data = b_b6 noprint; tables cislo/out=fr_bb6; run; data fr_bb6; set fr_bb6; if count = 1 then delete; run; data b_b6; merge b_b6 (in = in_1) fr_bb6 (in = in_2); by cislo; if count > 1 then do otec = '500000000'; matka = '000000000'; end; proc sort nodup data = b_b6; by cislo; run; data nac; set nac b_b5 b_b6; by cislo; drop gen; run; proc sort nodup data=nac; by cislo; proc freq data = nac noprint; tables cislo/out=fr_nac; run; data fr_nac; set fr_nac; if count = 1 then delete; run; data nac; merge nac (in = in_1) fr_nac (in = in_2); by cislo; if count > 1 then do otec = '500000000'; matka = '000000000'; end; proc sort nodup data = nac; by cislo; run; ******************** 44444444444444444444 **************; proc sql; create table matky_4 as select distinct matka as cislo from b2 where gen = 2; create table becka_4m as select distinct matky_4.cislo, otec, matka from matky_4, parC.rod_cely where matky_4.cislo = rod_cely.cislo; alter table becka_4m add gen num; update becka_4m set gen = 1; /* gen = 1 => matky + otci 3.generace rodicu krav uzitkovosti (4. generace rodicu)*/ create table otci_4 as select distinct otec as cislo from b2 where gen = 2; create table becka_4o as select distinct otci_4.cislo, otec, matka from otci_4, parC.rod_cely where otci_4.cislo = rod_cely.cislo; alter table becka_4o add gen num; update becka_4o set gen = 1; /* gen = 1 => matky + otci 3.generace rodicu krav uzitkovosti (4. generace rodicu)*/ create table b3 as select * from becka_4m union select * from becka_4o; quit; **************************************; proc sort nodup data=becka_4m; by cislo; proc sort nodup data=becka_4o; by cislo; run; data b_b7; merge nac (in = in_1) becka_4m (in = in_2); by cislo; if in_1 = 0 and in_2 = 1; keep cislo otec matka gen; proc sort nodup data = b_b7; by cislo; run; data b_b8; merge nac (in = in_1) becka_4o (in = in_2); by cislo; if in_1 = 0 and in_2 = 1; keep cislo otec matka gen; proc sort nodup data = b_b8; by cislo; run; proc freq data = b_b7 noprint; tables cislo/out=fr_bb7; run; data fr_bb7; set fr_bb7; if count = 1 then delete; keep cislo count; run; data b_b7; merge b_b7 (in = in_1) fr_bb7 (in = in_2); by cislo; if count > 1 then do otec = '500000000'; matka = '000000000'; end; run; proc sort nodup data = b_b7; by cislo; run; proc freq data = b_b8 noprint; tables cislo/out=fr_bb8; run; data fr_bb8; set fr_bb8; if count = 1 then delete; run; data b_b8; merge b_b8 (in = in_1) fr_bb8 (in = in_2); by cislo; if count > 1 then do otec = '5000000000'; matka = '000000000'; end; proc sort nodup data = b_b8; by cislo; run; data nac; set nac b_b7 b_b8; by cislo; drop gen; run; proc sort nodup data=nac; by cislo; proc freq data = nac noprint; tables cislo/out=fr_nac; run; data fr_nac; set fr_nac; if count = 1 then delete; run; data nac; merge nac (in = in_1) fr_nac (in = in_2); by cislo; if count > 1 then do otec = '500000000'; matka = '000000000'; end; proc sort nodup data = nac; by cislo; run; data nac; set nac; keep cislo otec matka; run; /*doplneni nul na konec rodokmenu*/ proc sql; create table matky_5 as select distinct matka as cislo from b3 where gen = 1; alter table matky_5 add otec char(9), matka char(9), gen num; update matky_5 set gen = 0, otec = '500000000', matka = '000000000'; create table otci_5 as select distinct otec as cislo from b3 where gen = 1; alter table otci_5 add otec char(9), matka char(9),gen num; update otci_5 set gen = 0, otec = '500000000', matka = '000000000' ; create table b4 as select * from matky_5 union select * from otci_5; quit; **********************************; data nuly; merge b4 (in = a) nac (in = b); by cislo; if a = 1 and b = 0; run; data nac; set nac nuly; by cislo; drop gen; run; proc sort nodup data = nac; by cislo; run; proc freq data = nac noprint; tables cislo/out=fr_nac; run; data fr_nac; set fr_nac; if count = 1 then delete; run; *******************************************************************; * konec tvorby rodokmenu ; * razeni podle generaci ; *******************************************************************; data gen; set becka b b1 b2 b3 b4 nuly; by cislo; run; proc sort nodup data=gen; by cislo gen; run; data gen; set gen; by cislo; if first.cislo; keep cislo gen; run; proc freq noprint data = gen; tables cislo/out = fr_gen; run; data fr_gen; set fr_gen; if count = 1 then delete; run; data generace; merge nac (in = g) gen (in = h); by cislo; if g = 1 and h = 1; run; *upravy cisel otcu; data generace; set generace; if cislo = '500000000' or cislo = '000000000' then delete; cislo = left(cislo); if length(cislo) = 6 then cislo = '500'!!cislo; otec = left(otec); if length(otec) = 6 then otec = '500'!!otec; run; proc sort nodup data = generace; by gen cislo; run; * jakpak se bude jmenovat rodokmenovy soubor ??? *; data parC.rod_c; set generace; run; *********************************************************** **** K O N E C ! ! ! ****; **********************************************************; proc freq noprint data = generace; tables cislo /out = konec; data konec; set konec; if count = 1 then delete; run; proc freq data = gen; tables gen; run; *********************************************************** * K O N E C ***; * P R E C I S L O V A N I ***; ***********************************************************; data vz_c; format kod_v $1.; /* if porlak = 1 and vekot < = 810 then kod_v = 1; if porlak = 1 and vekot > = 811 and vekot <= 949 then kod_v = 2; if porlak = 1 and vekot > = 950 then kod_v = 3; if porlak = 2 and vekot < = 1195 then kod_v = 4; if porlak = 2 and vekot > = 1196 and vekot <= 1350 then kod_v = 5; if porlak = 2 and vekot > = 1351 then kod_v = 6; if porlak = 3 and vekot < = 1572 then kod_v = 7; if porlak = 3 and vekot > = 1573 and vekot <= 1746 then kod_v = 8; if porlak = 3 and vekot > = 1747 then kod_v = 9; */ if porlak ne 1 then kod_v = 0; else if vekot <= 814 then kod_v = 1; else if vekot >= 815 and vekot <= 949 then kod_v = 2; else if vekot >= 950 then kod_v = 3; kod_v = left(kod_v); format kod_sp $1.; if sp = . then kod_sp = 5; else if sp <= 59 then kod_sp = 1; else if sp >= 60 and sp <= 89 then kod_sp = 2; else if sp >= 90 and sp <= 119 then kod_sp = 3; else kod_sp = 4; kod_sp = left(kod_sp); format kod_obd $1.; if mesot = 2 or mesot = 3 or mesot = 4 then kod_obd = 1; else if mesot = 5 or mesot = 6 or mesot = 7 then kod_obd = 2; else if mesot = 8 or mesot = 9 or mesot = 10 then kod_obd = 3; else kod_obd = 4; kod_obd=left(kod_obd); format kod_rok $1.; if rokot = 1995 then kod_rok = 1; if rokot = 1996 then kod_rok = 2; if rokot = 1997 then kod_rok = 3; if rokot = 1998 then kod_rok = 4; if rokot = 1999 then kod_rok = 5; if rokot = 2000 then kod_rok = 6; if rokot = 2001 then kod_rok = 7; if rokot = 2002 then kod_rok = 8; kod_rok = left(kod_rok); format kod_mez $1.; if porlak = 1 then kod_mez = 0; else if mez >=210 and mez <=349 then kod_mez = 1; else if mez >=350 and mez <=449 then kod_mez = 2; else kod_mez = 3; kod_mez = left(kod_mez); format spr_1 $4.; format spr_2 $4.; format spr_3 $4.; if porlak = 1 then do spr_1 = trim(kod_v!!kod_sp!!kod_obd!!kod_rok); spr_2 = 0; spr_3 = 0; end; else if porlak = 2 then do spr_1 = 0; spr_2 = trim(kod_sp!!kod_obd!!kod_rok!!kod_mez); spr_3 = 0; end; else do spr_1 = 0; spr_2 = 0; spr_3 = trim(kod_sp!!kod_obd!!kod_rok!!kod_mez); end; run; * precislovani SPR uvnitr laktaci ; data spr_1; set vz_c; if spr_1 = 0 then delete; keep spr_1; proc sort nodup data = spr_1; by spr_1; data spr_1; set spr_1; by spr_1; if first.spr_1; kod_spr1 = _n_; run; data spr_2; set vz_c; if spr_2 = 0 then delete; keep spr_2; proc sort nodup data = spr_2; by spr_2; data spr_2; set spr_2; by spr_2; if first.spr_2; kod_spr2 = _n_; run; data spr_3; set vz_c; if spr_3 = 0 then delete; keep spr_3; proc sort nodup data = spr_3; by spr_3; data spr_3; set spr_3; by spr_3; if first.spr_3; kod_spr3 = _n_; run; proc sort data = vz_c; by spr_1; data pokus; merge vz_c spr_1; by spr_1; run; proc sort data = pokus; by spr_2; data pokus; merge pokus spr_2; by spr_2; run; proc sort data = pokus; by spr_3; data pokus; merge pokus spr_3; by spr_3; if kod_spr1 = . then kod_spr1 = 0; if kod_spr2 = . then kod_spr2 = 0; if kod_spr3 = . then kod_spr3 = 0; run; * precislovani HTD uvnitr latkaci ; proc sort data = pokus; by htd; data htd1; set pokus; if porlak ne 1 then delete; keep htd; data htd1; set htd1; by htd; if first.htd; data htd1; set htd1; kod_htd1 = _n_; data htd2; set pokus; if porlak ne 2 then delete; keep htd; data htd2; set htd2; by htd; if first.htd; data htd2; set htd2; kod_htd2 = _n_; data htd3; set pokus; if porlak ne 3 then delete; keep htd; data htd3; set htd3; by htd; if first.htd; data htd3; set htd3; kod_htd3 = _n_; data pokus; merge pokus htd1 htd2 htd3; by htd; run; data pokus; set pokus; if porlak = 1 then do kod_htd2 = 0; kod_htd3 = 0; end; else if porlak = 2 then do kod_htd1 = 0; kod_htd3 = 0; end; else do kod_htd1 = 0; kod_htd2 = 0; end; if kod_htd1 = . then kod_htd1 = 0; if kod_htd2 = . then kod_htd2 = 0; if kod_htd3 = . then kod_htd3 = 0; run; * precislovani cisel zvirat s uzitkovosti - trvale prostredi ; proc sort data = pokus; by cislo; data cislo; set pokus; by cislo; if first.cislo; data cislo; set cislo; kod_cislo = _n_; keep cislo kod_cislo; data pokus; merge pokus cislo; by cislo; run; * precislovani zvirat v rodokmenu ; data id; set parc.rod_c; proc sort nodup data = id; by cislo; proc sort data=id; by gen; data id; set id; kod_id = _n_; keep kod_id cislo; proc sort data = id; by cislo; proc means data = id; proc means data = cislo; run; * precislovani zvirat s uzitkovosti ; data pokus; merge pokus (in = a) id (in = b); by cislo; if a=1 and b=1; run; *precislovani rodokmenu; proc sort data = parc.rod_c; by cislo; data rod; merge parc.rod_c id; by cislo; run; data matka; set rod; cislo = matka; if cislo = '000000000' or cislo = . then delete; keep cislo; proc sort nodup data = matka; by cislo; data matka; merge matka (in = a) rod; by cislo; if a = 1; matka = cislo; kod_m = kod_id; keep matka kod_m; proc sort data = rod; by matka; data rod; merge rod (in = a) matka (in = b); by matka; if a = 1 and b = 1; if matka = '000000000' or matka = . then kod_m = 0; if kod_m = . then kod_m = 0; keep cislo otec matka kod_id kod_m; data otec; set rod; cislo = otec; if cislo = '500000000' or otec = . then delete; keep cislo; proc sort nodup data = otec; by cislo; proc sort data = rod; by cislo; data otec; merge otec (in = a) rod; by cislo; if a = 1; otec = cislo; kod_ot = kod_id; keep otec kod_ot; proc sort data = rod; by otec; data rod; merge rod (in = a) otec (in = b); by otec; if a = 1 and b = 1; if otec = '500000000' or otec = . then kod_ot = 0; if kod_ot = . then kod_ot = 0; keep cislo otec matka kod_id kod_m kod_ot; proc sort data = rod; by cislo; *rodokmenovy soubor; data parc.rod_c; set rod; *precislovany rodokmen; data parc.rod_c2; set rod; keep kod_id kod_m kod_ot; run; * precislovany soubor s uzitkovostmi; data pokus2; set pokus; age = 2*((dim-6)/(305-6))-1; *age = (2*(dim - 6)*(1/305-6))-1; b1 = sqrt(2)*sqrt(0.5); b2 = sqrt(2)*sqrt(1.5)*age; b3 = sqrt(2)*sqrt(2.5)*(1.5*age**2-0.5); b4 = sqrt(2)*sqrt(3.5)*(2.5*age**3-1.5*age); if porlak = 1 then do mlk1 = mlk; atd..........................;