SAS中文论坛

标题: 弄了好长时间 大家能帮我看下这个比较怪的问题吗 好像不是程序本身问题 在线等急谢谢 [打印本页]

作者: shiyiming    时间: 2009-7-27 16:02
标题: 弄了好长时间 大家能帮我看下这个比较怪的问题吗 好像不是程序本身问题 在线等急谢谢
SAS 日志
NOTE: Copyright (c) 2002-2003 by SAS Institute Inc., Cary, NC, USA.
NOTE: SAS (r) 9.1 (TS1M3 DBCS3054)
      Licensed to BAOSTEEL, Site 0030618016.
NOTE: 该会话正在执行,平台: AIX 5.3


                                                                                             SAS 系统

496       +merge mbb51(in = f ) mbb52;
497       +by m_type_name salname ORD_USER_NAME FIN_USER_NUM;
498       +if f;
499       +if salname ne '';
500       +run;
501       +*/
502       +data mbb6;
503       +merge mbb51 mbb52;
504       +by m_type_name salname ORD_USER_NAME FIN_USER_NUM;
505       +run;
506       +
507       +proc sql;
508       +create table mbb7 as
509       +Select a.*,b.ord_wei3
510       +from mbb6 as a left join dsp4 as b
511       +on a.m_type_name=b.m_type_name and a.salname=b.tra_tpye and a.FIN_USER_NUM=b.customer;
512       +quit;
513       +
514       +proc sql;
515       +create table mbb71 as
516       +Select distinct m_type_name,salname,ORD_USER_NAME,FIN_USER_NUM,FIN_USER_NAME,exp,ord_wei1,ord_wei2,ord_wei3
517       +from mbb7
518       +Group by m_type_name,salname,ORD_USER_NAME,FIN_USER_NUM,FIN_USER_NAME,exp
519       +order by m_type_name,salname,ORD_USER_NAME,FIN_USER_NUM,FIN_USER_NAME,exp;
520       +quit;
521       +
522      
                                                                                             SAS 系统

571       +
572       +proc tabulate data=mbb71;
573       +class m_type_name salname ORD_USER_NAME FIN_USER_NAME exp;
574       +var ord_wei1 ord_wei2 ord_wei3;
575       +table m_type_name=''*(exp=''*salname=''*ORD_USER_NAME=''*FIN_USER_NAME='') all='总计',
576       +ord_wei1=''*sum='数据量一' ord_wei2=''*sum='数据量二' ord_wei3=''*sum='数据量三'
577       +/box='用户一  用户二  用户三  用户四  用户五';
578       +run;
579       +
580       +ods html close;
581       +ods listing;
===================================================================================
* 程序代码结束处
===================================================================================
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间         0.00 秒
      CPU 时间         0.00 秒
      

20090702
20090727
1
1   

NOTE: 表 WORK.MBB51 创建完成,有 3655 行,7 列。

NOTE: “PROCEDURE SQL”所用时间(总处理时间):
      实际时间         0.57 秒
      CPU 时间         0.32 秒
      

NOTE: 表 WORK.MBB52 创建完成,有 28 行,7 列。

NOTE: “PROCEDURE SQL”所用时间(总处理时间):
      实际时间         0.04 秒
      CPU 时间         0.03 秒
      


NOTE: 从数据集 WORK.MBB51 读取了 3655 个观测。
NOTE: 从数据集 WORK.MBB52 读取了 28 个观测。
NOTE: 数据集 WORK.MBB6 有 3661 个观测和 8 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
                                                                                             SAS 系统

      实际时间         0.05 秒
      CPU 时间         0.02 秒
      

NOTE: 表 WORK.MBB7 创建完成,有 3661 行,9 列。

NOTE: “PROCEDURE SQL”所用时间(总处理时间):
      实际时间         0.10 秒
      CPU 时间         0.03 秒
      

NOTE: GROUP BY 子句已被弃,因为 SELECT 子句和相关表的表达式的可选 HAVING 子句都没有引用汇总函数。
NOTE: 表 WORK.MBB71 创建完成,有 3661 行,9 列。

NOTE: “PROCEDURE SQL”所用时间(总处理时间):
      实际时间         0.12 秒
      CPU 时间         0.02 秒
      


NOTE: 从数据集 WORK.MBB7 读取了 3661 个观测。
NOTE: 数据集 WORK.MBB7 有 3661 个观测和 9 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间         0.04 秒
      CPU 时间         0.01 秒
      

NOTE: “PROCEDURE SQL”所用时间(总处理时间):
      实际时间         0.00 秒
      CPU 时间         0.00 秒
      

3661
NOTE: 正在写入 HTML Body(主体)文件: _WEBOUT

NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间         0.00 秒
      CPU 时间         0.00 秒
                                                                                             SAS 系统

      


[color=#FF0000:3sizay64]ERROR: 交叉内 2147483647 潜在交互操作的上限超出(对于行 2 处的表语句)。[/color:3sizay64]
NOTE: SAS 系统由于错误而停止了该步的处理。
NOTE: 从数据集 WORK.MBB71 读取了 3661 个观测。
NOTE: “PROCEDURE TABULATE”所用时间(总处理时间):
      实际时间         0.14 秒
      CPU 时间         0.13 秒
      
584       +%stpend;
585       +
586       +*  Begin EG generated code (do not edit this line);
587       +*';*";*/;run;
588       +
589       +*  End EG generated code (do not edit this line);
NOTE: %INCLUDE(水平 1)结束。


--------------------------------------------------------------------------------

该请求实时占用 14.91 秒。




***********************************************************************************
PS:程序很长,只是个参考,我只是想问问大家有没有见到过最后面的
这个ERROR,这个程序都没问题就是到最后输出结果时出了:[color=#FF0000:3sizay64]ERROR: 交叉内 2147483647 潜在交互操作的上限超出(对于行 2 处的表语句)。[/color:3sizay64]
这个ERROR,很奇怪,大家如果有见过这个ERROR的,告诉我一下怎么解决的。非常感谢大家!
***********************************************************************************
作者: shiyiming    时间: 2009-7-28 20:07
标题: Re: 弄了好长时间 大家能帮我看下这个比较怪的问题吗 好像不是程序本身问题 在线等急谢谢
从error 上看 是因为m_type_name salname ORD_USER_NAME FIN_USER_NAME exp之间的交叉过多,
建议将tabulate 过程改为proc mean 或者 proc sql
作者: shiyiming    时间: 2009-7-29 08:57
标题: Re: 弄了好长时间 大家能帮我看下这个比较怪的问题吗 好像不是程序本身问题 在线等急谢谢
把易变的业务规则写死在代码里而不是由数据驱动。将来的维护。。。。。。。。。。。。可怕。。。。
宝钢的同志啊。。。。。一点公司业务的保密原则都没有。。。。。。。。。。随便就发论坛。。。。。你们老板看到直接吐血。。。。。。。
作者: shiyiming    时间: 2009-7-29 15:04
标题: Re: 弄了好长时间 大家能帮我看下这个比较怪的问题吗 好像不是程序本身问题 在线等急谢谢
to 4772814

谢谢!
您好,我用tabulate是把目标结果集以HTML的方式输出到浏览器上,如果用proc mean 或者 proc sql能做到吗?
作者: shiyiming    时间: 2009-7-30 00:02
标题: Re: 弄了好长时间 大家能帮我看下这个比较怪的问题吗 好像不是程序本身问题 在线等急谢谢
以下仅仅供参考


proc sort data=mbb71 ;
by m_type_name salname ORD_USER_NAME FIN_USER_NAME exp;
run;

proc means data=mbb71 noprint;
by m_type_name salname ORD_USER_NAME FIN_USER_NAME exp;
output out=mbb71_sum  sum(ord_wei1 ord_wei2  ord_wei3)=        ;
run;

ods html;
proc print label;
var  ord_wei1 ord_wei2  ord_wei3;
label ord_wei1 = '数据量一'   ord_wei2=        '数据量二'         ord_wei3= '数据量三';
run;
ods html close;
作者: shiyiming    时间: 2009-7-30 14:52
标题: Re: 弄了好长时间 大家能帮我看下这个比较怪的问题吗 好像不是程序本身问题 在线等急谢谢
to 4772814

呵呵 你好
不知道你平时用不用tabulate进行数据输出,我按照你的代码输出的样张是:
[img:nohhex0w]http://p.kaixin001.com/privacy/photo/27/13/2813422_163271336.png[/img:nohhex0w]

如果程序没有报错输出的结果应该是:
[img:nohhex0w]http://p.kaixin001.com/privacy/photo/27/13/2813422_163271373.png[/img:nohhex0w]

从tabulate的下面一段代码中
[color=#0000FF:nohhex0w]table m_type_name=''*(exp=''*salname=''*ORD_USER_NAME=''*FIN_USER_NAME='') all='总计',
ord_wei1=''*sum='数据量一' ord_wei2=''*sum='数据量二' ord_wei3=''*sum='数据量三'[/color:nohhex0w]
可看出对输出的字段进行了分类汇总运算,并且在行变量的末端还有一个总计,这些都是tabulate自动生成的,
不知道proc means能否达到这一要求。
谢谢!
作者: shiyiming    时间: 2009-7-30 17:40
标题: Re: 弄了好长时间 大家能帮我看下这个比较怪的问题吗 好像不是程序本身问题 在线等急谢谢
网络问题你的两个图片没有打开,从程序上看 在报表的最后一行会有个每一列的汇总。
proc mean 和 proc sql 不能直接计算出。需要配合data 部进行操作。
我个人认为你这么多的交叉分类,总体的sum还是另外搞个报表。




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2