I use a program that someone created decades ago, and that person is no longer available. It appears the program is computing distance scores, and I want to get it to spit out a data file that contains all of those scores. But I admittedly don't fully understand what the program is doing at each step, and I don't know how to get it to produce the data file I want. Google and AI have been little to no help.
The syntax I have is below. The variables I want spit out into a data file are the ones in green font,
d_imp1-d_imp41 d_lev1-d_lev41 distance
Can someone please point me down the right path?
-------------------------------------------------------------------------------------------------------
* Important: Length of JOB_EVAL and JOBTITLE variables need to be the same;
options pageno=1 obs=max mprint mlogic symbolgen nodsnferr;
title1 'Job Analysis Survey';
title2 'testing'; *<<<;
%macro merge1(cut,folder,client,filename,var1,value1,var2,value2,clifam1,clifam2);
%local cut folder client filename var1 value1 var2 value2 clifam1 clifam2;
libname client "c:\project folders\linkup-&folder\&client";
libname temp 'c:\project folders\linkup-eas\_master 5-2008\TempFiles';
libname val 'c:\project folders\linkup-eas\_master 5-2008';
proc access dbms=xls;
create work.norm.access;
path='c:\project folders\linkup-eas\_master 5-2008\fitnorm.xls'; * <<<;
getnames=y;
range='a1..b100';
scantype=y;
worksheet=fitnorm;
type 1=n 2=n;
mixed=yes;
assign=n;
list all;
create work.norm.view;
select all;
run;
proc sort tagsort data=work.norm out=s_norm;
by fitvalue;
proc transpose data=s_norm out=rot_norm;
var d2;
run;
data client;
length battlink $ 75;
set client.&filename;
battlink=upcase(battlink);
if &var1=upcase("&value1"); * <<< select cases - comment out if no parameters specified;
*if &var2="&value2"; * <<< select cases - comment out if no parameters specified;
proc means data=client noprint;
var t_imp1-t_imp41 t_lev1-t_lev41;
output out=m_client mean=IMP1-IMP41 LEV1-LEV41;
proc transpose data=m_client out=rotm_cli prefix=client;
var imp1-imp41 lev1-lev41;
run;
proc sort tagsort data=val.PSI_VAL out=s_psi; by soc;
data s_onet(drop=i);
set val.ONet_GWA;
array rate(82) imp1-imp41 lev1-lev41;
rat_miss=0;
do i=1 to 82;
if rate{i}=. then rat_miss+1;
end;
if rat_miss=82 then delete;
proc sort tagsort;
by soc;
proc transpose data=s_onet out=rot_onet(drop=_label_);
var imp1-imp41 lev1-lev41;
id soc;
run;
proc sort tagsort data=rotm_cli; by _name_;
proc sort tagsort data=rot_onet; by _name_;
* compute for r;
data corr;
merge rotm_cli rot_onet;
by _name_;
proc corr data=corr outp=pcorr(drop=_name_ where=(_type_='CORR')) noprint;
with client1;
proc transpose data=pcorr out=rotpcorr(rename=(col1=corr));
run;
data corr2(drop=_name_);
length soc $ 10;
set rotpcorr;
soc=left(translate(_name_, '-', 'N', '', '_', '.', 'D'));
proc sort tagsort;
by soc;
run;
* compute for distance and fit;
data psi(drop=i);
length psifam $ 25;
merge s_psi(in=a) s_onet(in=b) corr2(in=c);
by soc;
if a and b and c;
* jobs included in the validation of families - appendix B of the IST linkup report;
if soc in ('11-3051.00',
'11-3040.00',
'51-1011.00') then psifam='Managerial/Supervisory';
else if soc in ('43-2021.02',
'43-3011.00',
'43-3031.00',
'43-4051.02',
'43-4071.00',
'43-5021.00',
'43-5032.00',
'43-5061.00',
'43-5081.03',
'43-6011.00',
'43-6014.00',
'43-9011.00',
'43-9021.00',
'43-9022.00',
'43-9041.01',
'43-9061.00') then psifam='Clerical/Administrative';
else if soc in ('17-3023.01',
'19-4041.02',
'43-5041.00',
'49-2022.01',
'49-2022.05',
'49-2092.01',
'49-3011.01',
'49-3023.01',
'49-9031.02',
'49-9051.00',
'49-9098.00',
'51-2011.01',
'51-4012.00',
'51-4041.00',
'51-5021.00',
'51-8013.02',
'51-9198.01',
'53-3021.00',
'53-7051.00') then psifam='Production/Mechanical';
else if soc in ('15-1021.00',
'17-2011.00',
'17-2071.00',
'17-2112.00',
'17-2141.00',
'49-2094.00',
'17-3013.00') then psifam='Technical'; * <<< ;
* compute for corrected validity (p) for each test here;
array r(306) eas01_r eas02_r eas03_r eas04_r eas05_r eas06_r eas07_r eas08_r eas09_r eas10_r
bst01_r bst02_r bst03_r bst04_r bst05_r bst06_r bst07_r bst08_r bst09_r bst10_r
bst11_r bst12_r bst13_r bst14_r bst15_r vpw4_r vpw4b_r vpw5_r vpw6_r vpw4sv_r vpw6sv_r vpw6t_r
vptec_r vpte_r vptc_r vpsvst_r vpsv_r vps_r vpt_r gpsagr_r gpscon_r gpsext_r gpssta_r gpsope_r gpsprs_r
gpssel_r gpscar_r gpsdep_r gpschl_r gpsopl_r peta1_r peta_r petb_r ist1_r ist2_r
mptc_r msjia_r amap_r mdti_r fst_r fstnew_r pst_r mmt_r salsjt_r srvsjt_r psrea_r psric_r psrie_r psrir_r
prb_r w5asrt_r w5sp_r osa_r leab_r fsab_r spfld_r spfa_r spfb_r spfc_r spfe_r spff_r spfg_r spfh_r spfi_r spfl_r
spfm_r spfn_r spfo_r spfq1_r spfq2_r spfq3_r spfq4_r sglex_r sglan_r sgltm_r sglin_r sglsc_r
SDNAT_r SDNAAS_r SDNAEC_r SDNASC_r SDNAFR_r HCFOV_r HCFAC_r HCFAD_r HCFCO_r HCFEQ_r HCFDP_r HCFCC_r HCFQF_r HCFCM_r
NFOV_r NFAC_r NFAD_r NFCO_r NFEQ_r NFDM_r NFDP_r NFCC_r NFQF_r NFCM_r LDOv_r LDAc_r LDAd_r LDCO_r LDCM_r LDDE_r LDIn_r
LDIIA_r LDMC_r LDMO_r LDNeg_r LDONI_r LDPM_r LDPO_r LDPI_r LDPF_r LDSA_r LDSAS_r LDWC_r SACOV_r SACCF_r SACMT_r SACOW_r
SACPA_r SACPO_r SACPP_r SACQF_r SACRR_r SACSF_r SACWM_r SACCM_r SLPOV_r SLPFC_r SLPRO_r SLPCS_r SLPDM_r SLPDR_r SLPIN_r
SLPII_r SLPLS_r SLPPO_r SLPBR_r SLPAD_r SLPSO_r SLPMR_r SLPCM_r SAMOV_r SAMAT_r SAMAD_r SAMLP_r SAMPA_r SAMPL_r SAMPT_r SAMPM_r
SAMRS_r SAMRR_r SAMSO_r SAMTW_r SAMWE_r SAMWT_r SAMMR_r SAMCD_r SAMCM_r SCFOV_r SCFSR_r SCFQR_r SCFIR_r SCFDR_r SCFAT_r
SCFAB_r SCFTR_r SCFIN_r SCFCM_r BMAR_r PROAC_r PROAD_r PROCO_r PROLP_r PROMF_r PRORD_r PROVD_r PROCM_r SVFOV_r
SVFQR_r SVFSR_r SVFPR_r SVFAR_r SVFTR_r SVFSP_r SVFSL_r SVFCM_r SFPOV_r SFPQR_r SFPST_r SFPPR_r SFPSR_r SFPAR_r SFPTR_r
SFPIN_r SFPSP_r SFPSO_r SFPCM_r TMCB_r CALOV_r CALCM_r CALAC_r CALAM_r CALAL_r CALAD_r CALAT_r CALBR_r CALBA_r CALCD_r CALCT_r
CALCO_r CALCP_r CALCR_r CALCA_r CALCN_r CALCL_r CALCI_r CALDC_r CALDE_r CALDI_r CALDR_r CALET_r CALFB_r CALIP_r CALIS_r CALIA_r
CALIN_r CALIY_r CALDS_r CALLC_r CALLM_r CALLH_r CALCG_r CALMI_r CALNE_r CALOC_r CALOS_r CALPP_r CALPM_r CALPR_r CALQF_r CALSF_r
CALSA_r CALST_r CALSW_r CALSO_r CALSI_r CALTB_r CALTM_r FTRIC_r FTRLF_r FTRCT_r FTRDC_r FTRDO_r FTRIO_r FTRDP_r FTRRF_r FTREN_r
FTRAP_r FTRRE_r FTROP_r FTRDR_r FTRMO_r FTRTW_r FTRST_r FTRSR_r FTRFL_r MDGCR_r MDGFL_r MDGSE_r MDGSY_r LOGIV_r LOGIN_r LOGIA_r
LOGITS_r LOGISP_r LOGIAC_r LOGAV_r LOGAN_r LOGAA_r LOGATS_r;
array p(306) eas01_p eas02_p eas03_p eas04_p eas05_p eas06_p eas07_p eas08_p eas09_p eas10_p
bst01_p bst02_p bst03_p bst04_p bst05_p bst06_p bst07_p bst08_p bst09_p bst10_p
bst11_p bst12_p bst13_p bst14_p bst15_p vpw4_p vpw4b_p vpw5_p vpw6_p vpw4sv_p vpw6sv_p vpw6t_p
vptec_p vpte_p vptc_p vpsvst_p vpsv_p vps_p vpt_p gpsagr_p gpscon_p gpsext_p gpssta_p gpsope_p gpsprs_p
gpssel_p gpscar_p gpsdep_p gpschl_p gpsopl_p peta1_p peta_p petb_p ist1_p ist2_p
mptc_p msjia_p amap_p mdti_p fst_p fstnew_p pst_p mmt_p salsjt_p srvsjt_p psrea_p psric_p psrie_p psrir_p
prb_p w5asrt_p w5sp_p osa_p leab_p fsab_p spfld_p spfa_p spfb_p spfc_p spfe_p spff_p spfg_p spfh_p spfi_p spfl_p
spfm_p spfn_p spfo_p spfq1_p spfq2_p spfq3_p spfq4_p sglex_p sglan_p sgltm_p sglin_p sglsc_p
SDNAT_p SDNAAS_p SDNAEC_p SDNASC_p SDNAFR_p HCFOV_p HCFAC_p HCFAD_p HCFCO_p HCFEQ_p HCFDP_p HCFCC_p HCFQF_p HCFCM_p
NFOV_p NFAC_p NFAD_p NFCO_p NFEQ_p NFDM_p NFDP_p NFCC_p NFQF_p NFCM_p LDOv_p LDAc_p LDAd_p LDCO_p LDCM_p LDDE_p LDIn_p
LDIIA_p LDMC_p LDMO_p LDNeg_p LDONI_p LDPM_p LDPO_p LDPI_p LDPF_p LDSA_p LDSAS_p LDWC_p SACOV_p SACCF_p SACMT_p SACOW_p
SACPA_p SACPO_p SACPP_p SACQF_p SACRR_p SACSF_p SACWM_p SACCM_p SLPOV_p SLPFC_p SLPRO_p SLPCS_p SLPDM_p SLPDR_p SLPIN_p
SLPII_p SLPLS_p SLPPO_p SLPBR_p SLPAD_p SLPSO_p SLPMR_p SLPCM_p SAMOV_p SAMAT_p SAMAD_p SAMLP_p SAMPA_p SAMPL_p SAMPT_p SAMPM_p
SAMRS_p SAMRR_p SAMSO_p SAMTW_p SAMWE_p SAMWT_p SAMMR_p SAMCD_p SAMCM_p SCFOV_p SCFSR_p SCFQR_p SCFIR_p SCFDR_p SCFAT_p
SCFAB_p SCFTR_p SCFIN_p SCFCM_p BMAR_p PROAC_p PROAD_p PROCO_p PROLP_p PROMF_p PRORD_p PROVD_p PROCM_p SVFOV_p
SVFQR_p SVFSR_p SVFPR_p SVFAR_p SVFTR_p SVFSP_p SVFSL_p SVFCM_p SFPOV_p SFPQR_p SFPST_p SFPPR_p SFPSR_p SFPAR_p SFPTR_p
SFPIN_p SFPSP_p SFPSO_p SFPCM_p TMCB_p CALOV_p CALCM_p CALAC_p CALAM_p CALAL_p CALAD_p CALAT_p CALBR_p CALBA_p CALCD_p CALCT_p
CALCO_p CALCP_p CALCR_p CALCA_p CALCN_p CALCL_p CALCI_p CALDC_p CALDE_p CALDI_p CALDR_p CALET_p CALFB_p CALIP_p CALIS_p CALIA_p
CALIN_p CALIY_p CALDS_p CALLC_p CALLM_p CALLH_p CALCG_p CALMI_p CALNE_p CALOC_p CALOS_p CALPP_p CALPM_p CALPR_p CALQF_p CALSF_p
CALSA_p CALST_p CALSW_p CALSO_p CALSI_p CALTB_p CALTM_p FTRIC_p FTRLF_p FTRCT_p FTRDC_p FTRDO_p FTRIO_p FTRDP_p FTRRF_p FTREN_p
FTRAP_p FTRRE_p FTROP_p FTRDR_p FTRMO_p FTRTW_p FTRST_p FTRSR_p FTRFL_p MDGCR_p MDGFL_p MDGSE_p MDGSY_p LOGIV_p LOGIN_p LOGIA_p
LOGITS_p LOGISP_p LOGIAC_p LOGAV_p LOGAN_p LOGAA_p LOGATS_p;
do i=1 to 306;
p{i}=r{i}/sqrt(crit_rel);
end;
proc means data=psi noprint;
var imp1-imp41 lev1-lev41;
class soc crit_typ;
output out=m_onet(where=(_type_=3)) mean=on_imp1-on_imp41 on_lev1-on_lev41;
proc sort tagsort data=psi;
by soc crit_typ;
run;
data fit(keep=soc crit_typ distance fitval);
set m_onet(drop=_type_);
if _n_=1 then set m_client(drop=_type_);
if _n_=1 then set rot_norm(drop=_name_ _label_);
array psi(82) on_imp1-on_imp41 on_lev1-on_lev41;
array cli(82) imp1-imp41 lev1-lev41; * transformed ratings - used to be t_imp1-t_imp41 t_lev1-t_lev41;
array diff(82) d_imp1-d_imp41 d_lev1-d_lev41;
do i=1 to 82;
diff{i}=(psi{i}-cli{i})**2;
end;
distance=round(sum(of d_imp1-d_imp41 d_lev1-d_lev41));
col100=711225; * highest possible score;
array lopct(99) col1-col99;
array hipct(99) col2-col100;
do i=1 to 99;
if lopct{i} <= distance < hipct{i} then fitval=i;
end;
proc sort tagsort;
by soc crit_typ;
run;
data final;
merge psi(in=a) fit(in=b);
by soc crit_typ;
if a and b;
*if . < fitval<= &cut;
%merge1(cut=30,folder=EAS, client=Dennis test 1, filename=dtest1_jas, var1=battlink, value1=MW, var2=, value2=, clifam1=, clifam2=)