Hi @KachiM,
I did try your code. Actually I don't know whether the order of statements important or not, but I placed your code into my existing code. I got an error says that p_m is out of range. I guess it is a simple error to be fixed.
Here is all of my code and my input files are attached. My all code will be more helpful to explain what I mean since I might not use proper terms.
I appreciate for your help.
data par; infile 'C:\cluster_new\mlg1.txt'; input a1 a2 a3 b1 b2 b3 ; run; data score; infile 'C:\cluster_new\mlgs.txt'; input theta1 theta2 theta3; run; data all_pars; if _n_=1 then set score; set par; run; data all_pars; set all_pars; s1=-(a1+a2+a3)/4; s2=s1+a1; s3=s1+a2; s4=s1+a3; inc1=-(b1+b2+b3)/4; inc2=inc1+b1; inc3=inc1+b2; inc4=inc1+b3; run; data _null_; length c $16000; /* 500*4*(up to 😎 characters: " ex123_4" */ do i=1 to 3; do j=1 to 4; c=catx(' ',c,cats('ex',i,'_',j)); end; end; call symputx('vlist',c); run; data _null_; array ex1[4] _temporary_ (10,20,30,40); array ex2[4] _temporary_ (20,30,40,50); array ex3[4] _temporary_ (30,40,50,60); array sumex[3] _temporary_ (5,10,10);
do i = 1 to dim(ex1); ex1[i] = ex1[i] / sumex[1]; ex2[i] = ex2[i] / sumex[2]; ex3[i] = ex3[i] / sumex[3]; put ex1[i] = ex2[i] = ex3[i] =; end; p_m1 = 0; p_m2 = 0; p_m3 = 0; do i = 1 to dim(ex1); p_m1 = p_m1 + ex1[i] * ex3[i]; p_m2 = p_m2 + ex1[i] * ex2[i]; p_m3 = p_m3 + ex2[i] * ex3[i]; ex1[1]=2 ex2[1]=2 ex3[1]=3 ex1[2]=4 ex2[2]=3 ex3[2]=4 ex1[3]=6 ex2[3]=4 ex3[3]=5 ex1[4]=8 ex2[4]=5 ex3[4]=6 p_m1=100 p_m2=80 p_m3=68 end; put p_m1 = p_m2 = p_m3= ; run; data all_pars1; set all_pars (obs=20);; array t {3} theta1-theta3 ; array ex {3,4} &vlist; array s {4}; array inc {4}; array sumex{3} 8.; array p_m{4} ; do i=1 to 3; do j=1 to 4; ex(i,j)=exp(t(i)*s(j)+inc(j)); sumex{i}=sum(sumex{i},ex{i,j}); ex(i,j)=exp(t(i)*s(j)+inc(j)); sumex{i}=sum(sumex{i},ex{i,j}); p_m(i)=sum((ex{i,j}/sumex{i})*(ex{i,j}/sumex{j})); end; end; run;
... View more