全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2827 4
2009-07-30
请问这个SAS程序出了什么问题,该如何解决呢?我把log贴出来,在线等。谢谢!

2573  proc iml;
NOTE: IML Ready
2574
2575  use Stag3data2;
2576  read all into data;
NOTE: I/O required temporary file to be opened.
2577  /*show names; */
2578  /*print data;*/
2579  start maxFunc(F) global(data);
2580  sum=0;
2581  Uf=J(1,3,0);
2582  Um=J(1,3,0);
2583  Ud=J(1,3,0);
2584  Pf=J(1,3,0);
2585  Pm=J(1,3,0);
2586  Pd=J(1,3,0);
2587  Vh=J(1,2,0);
2588  G=J(1,3,0);
2589  do i=1 to 1988;
2590  prob=0;
2591  do j=1 to 4;
2592
2593  /*stag1*/
2594
2595  /*Pf1 stands for fπ1*/
2596
2597  z=(i-1)*4+j;
2598
2599  /* change to z */
2600
2601  Uf[1]=F[1]*data[z,5]+F[2]*data[z,6]+F[3]*data[z,7]+F[4]*data[z,8]
2602  +F[5]*data[z,9]+F[6]*data[z,10]+F[7]*data[z,11]+F[8]*data[z,12]+F[9]*dat
a[z,13]+F[10]*data[z,14];
2603
2604  Uf[2]=F[11]*data[z,15]+F[12]*data[z,16]+F[13]*data[z,17]+F[14]*data[z,18
]
2605  +F[15]*data[z,19]+F[16]*data[z,20]+F[17]*data[z,21]+F[18]*data[z,22]+F[1
9]*data[z,23]+F[20]*data[z,24];
2606
2607  Uf[3]=F[21];
2608
2609  Pf[1]=exp(Uf[1])/(exp(Uf[1])+exp(Uf[2])+exp(Uf[3]));
2609!                                                     /* Pf[1] stand for f
π1 */
2610  Pf[2]=exp(Uf[2])/(exp(Uf[1])+exp(Uf[2])+exp(Uf[3]));
2611  Pf[3]=exp(Uf[3])/(exp(Uf[1])+exp(Uf[2])+exp(Uf[3]));
2612
2613  /*Pm1 stand for mπ1*/
2614
2615  Um[1]=F[22]*data[z,5]+F[23]*data[z,6]+F[24]*data[z,7]+F[25]*data[z,8]
2616  +F[26]*data[z,9]+F[27]*data[z,10]+F[28]*data[z,11]+F[29]*data[z,12]+F[30
]*data[z,13]+F[31]*data[z,14];
2617
2618  Um[2]=F[32]*data[z,15]+F[33]*data[z,16]+F[34]*data[z,17]+F[35]*data[z,18
]
2619  +F[36]*data[z,19]+F[37]*data[z,20]+F[38]*data[z,21]+F[39]*data[z,22]+F[4
0]*data[z,23]+F[41]*data[z,24];
2620
2621  Um[3]=F[42];
2622  Pm[1]=exp(Um[1])/(exp(Um[1])+exp(Um[2])+exp(Um[3]));
2623  Pm[2]=exp(Um[2])/(exp(Um[1])+exp(Um[2])+exp(Um[3]));
2624  Pm[3]=exp(Um[3])/(exp(Um[1])+exp(Um[2])+exp(Um[3]));
2625
2626  /*Pd1 stand for dπ1*/
2627
2628  Ud[1]=F[43]*data[z,5]+F[44]*data[z,6]+F[45]*data[z,7]+F[46]*data[z,8]
2629  +F[47]*data[z,9]+F[48]*data[z,10]+F[49]*data[z,11]+F[50]*data[z,12]+F[51
]*data[z,13]+F[52]*data[z,14];
2630
2631  Ud[2]=F[53]*data[z,15]+F[54]*data[z,16]+F[55]*data[z,17]+F[56]*data[z,18
]
2632  +F[57]*data[z,19]+F[58]*data[z,20]+F[59]*data[z,21]+F[60]*data[z,22]+F[6
1]*data[z,23]+F[62]*data[z,24];
2633
2634  Ud[3]=F[63];
2635  Pd[1]=exp(Ud[1])/(exp(Ud[1])+exp(Ud[2])+exp(Ud[3]));
2636  Pd[2]=exp(Ud[2])/(exp(Ud[1])+exp(Ud[2])+exp(Ud[3]));
2637  Pd[3]=exp(Ud[3])/(exp(Ud[1])+exp(Ud[2])+exp(Ud[3]));
2638
2639  /*stag2*/
2640
2641  Vf=
2642  Vh[1]=F[64]*data[z,28]+F[65]*data[z,31]+F[66]*data[z,34];
2642!                                                           /*Vh stand for
house vote */
2643  Vh[2]=F[64]*data[z,29]+F[65]*data[z,32]+F[66]*data[z,35];
2644
2645  G[1]=(1-Pf[3]*Pm[3]*Pd[3])*(exp(Vh[1])/(exp(Vh[1])+exp(Vh[2])));
2645!                                                                  /*G sta
nd for probability of household*/
2646  G[2]=(1-Pf[3]*Pm[3]*Pd[3])*(exp(Vh[2])/(exp(Vh[1])+exp(Vh[2])));
2647  G[3]=Pf[3]*Pm[3]*Pd[3];
2648
2649  /*stag3*/
2650
2651  Prof=Pf[1]*data[z,28]+Pf[2]*data[z,29]+Pf[3]*data[z,30];
2651!                                                          /*Pf means to c
hoose the available fπ1,2,3*/
2652  Prom=Pm[1]*data[z,31]+Pm[2]*data[z,32]+Pm[3]*data[z,33];
2653  Prod=Pd[1]*data[z,34]+Pd[2]*data[z,35]+Pd[3]*data[z,36];
2654
2655  G[3]=G[1]*data[z,25]+G[2]*data[z,26];
2655!                                                          /* G[3] stand f
or group choice*/
2656  fP11=1;
2657  fP21=exp(Uf[1])/(exp(Uf[1])+exp(Uf[3]));
2657!                                                        /*fP21 :probabili
ty of switch from channel 2 to 1*/
2658  fP23=exp(Uf[3])/(exp(Uf[1])+exp(Uf[3]));
2659  fP12=exp(Uf[2])/(exp(Uf[2])+exp(Uf[3]));
2660  fP22=1;
2661  fP13=exp(Uf[3])/(exp(Uf[2])+exp(Uf[3]));
2662
2663  mP11=1;
2664  mP21=exp(Um[1])/(exp(Um[1])+exp(Um[3]));
2665  mP23=exp(Um[3])/(exp(Um[1])+exp(Um[3]));
2666  mP12=exp(Um[2])/(exp(Um[2])+exp(Um[3]));
2667  mP22=1;
2668  mP13=exp(Um[3])/(exp(Um[2])+exp(Um[3]));
2669
2670  dP11=1;
2671  dP21=exp(Ud[1])/(exp(Ud[1])+exp(Ud[3]));
2672  dP23=exp(Ud[3])/(exp(Ud[1])+exp(Ud[3]));
2673  dP12=exp(Ud[2])/(exp(Ud[2])+exp(Ud[3]));
2674  dP22=1;
2675  dP13=exp(Ud[3])/(exp(Ud[2])+exp(Ud[3]));
2676
2677  fP=fP11*data[z,41]+fP21*data[z,42]+fP23*data[z,43]+fP12*data[z,44]+fP22*
data[z,45]+fP13*data[z,46];
2678  mP=mP11*data[z,47]+mP21*data[z,48]+mP23*data[z,49]+mP12*data[z,50]+mP22*
data[z,51]+mP13*data[z,52];
2679  dP=dP11*data[z,53]+dP21*data[z,54]+dP23*data[z,55]+dP12*data[z,56]+dP22*
data[z,57]+dP13*data[z,58];
2680
2681  prob=prob + Prof*Prom*Prod*G[3]*fP*mP*dP;
2682  end;
2683  sum=sum*prob ;
2684  end;
2685  return(sum);
2686  finish maxFunc;
NOTE: Module MAXFUNC defined.
2687
2688  optn={1 2};
2689  X=J(1,66,0);
2690  call nlpcg(rc,xres,"maxFunc",X,optn);
ERROR: (execution) Invalid subscript or subscript out of range.

operation : [ at line 2601 column 16
operands  : DATA, Z, *LIT1035
DATA   7948 rows     58 cols    (numeric)

Z      1 row       1 col     (numeric)

      7949

*LIT1035      1 row       1 col     (numeric)

         5

statement : ASSIGN at line 2601 column 1
traceback : module MAXFUNC at line 2601 column 1

ERROR: (execution) Invalid subscript or subscript out of range.

operation : NLPCG at line 2690 column 1
operands  : *LIT1332, X, OPTN

*LIT1332      1 row       1 col     (character, size 7)

maxFunc
X      1 row      66 cols    (numeric)

OPTN      1 row       2 cols    (numeric)

         1         2

statement : CALL at line 2690 column 1
2691
2692  run;
NOTE: Module MAIN is undefined in IML; cannot be RUN.
2693  quit;
NOTE: Exiting IML.
NOTE: 299 workspace compresses.
NOTE: SAS 系统由于错误而停止了该步的处理。
NOTE: “PROCEDURE IML”所用时间(总处理时间):
      实际时间         2.46 秒
      CPU 时间         1.93 秒
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2009-7-30 23:01:48
Line 2689  X=J(1,66,0) 中的 X 好像需要两个数, 既 X={value1, value2}
用PUT 输出X,看看对不对.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2009-7-31 21:32:30
To yongyitian :
不太明白你的意思,我试了试这个,程序报以下错误:能具体说说该怎样检测吗?谢谢!
1423  optn={1 2};
1424  X=J(1,66,0);
1425  file 'd:\test.txt';
1426  put X;
ERROR: Operand X is not a scalar.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2009-7-31 22:05:13
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2009-8-1 10:54:32
不清楚你解决什么问题,可能是sas下的矩阵操作有问题,看看IML ,
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群