楼主: WUPUQU
2863 0

[问答] sql code如何理解 [推广有奖]

  • 1关注
  • 0粉丝

大专生

18%

还不是VIP/贵宾

-

威望
0
论坛币
254 个
通用积分
0
学术水平
3 点
热心指数
3 点
信用等级
0 点
经验
1349 点
帖子
27
精华
0
在线时间
57 小时
注册时间
2012-9-28
最后登录
2015-7-14

楼主
WUPUQU 发表于 2015-6-12 17:58:26 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
这个宏是用来提取PayType的众数的值,但具体是如何展开,运行的?(该宏亲测有效,正确)
感觉这个sql code 比较高级,被优化过的。理解不了!!!!
特别是子子查询里WHERE p2.&IDVar= p1.&IDVar,这个具体是如何连接上的
自己另写了一个简单的sql code,效果一样

/* Macro VarMode */
/*******************************************************/
%macro VarMode(TransDS, IDVar, XVar, OutDS);
/* Calculation of the mode of a variable Xvar from a transaction
   dataset using the classic implementation in ANSI SQL */
proc sql noprint;
    create table &OutDS as
        SELECT &IDVar , MIN( &XVar ) AS mode
        FROM (
               SELECT &IDVar,  &XVar
               FROM &TransDS p1
               GROUP BY &IDVar, &XVar
               HAVING COUNT( * ) =
                     (SELECT MAX( CNT )
                      FROM (SELECT COUNT( * ) AS CNT
                            FROM &TransDS p2
                            WHERE p2.&IDVar= p1.&IDVar
                            GROUP BY p2.&XVar
                            ) AS p3
                      )
              ) AS p
        GROUP BY p.&IDVar;
quit;
%mend;


data Trans;
informat TransDate date9.;
format TransDate Date9.;
informat PayType $10.;

input CustID TransDate  PayType $ @@;
datalines;
1 16Jan2008 Check    1 07Feb2008 Check
1 09Mar2008 Check    1 18Apr2008 Check
1 19May2008 Transfer 1 22Jun2008 Transfer
1 08Jul2008 Check    1 23Aug2008 Transfer
1 14Sep2008 Transfer 1 08Oct2008 Check
2 15Jan2008 Transfer 2 12Feb2008 Check
2 12Mar2008 Transfer 2 19Apr2008 Check
2 22May2008 Transfer 2 28Jun2008 Transfer
2 26Jul2008 Transfer 2 25Aug2008 Transfer
2 20Sep2008 Check    2 21Oct2008 Check
3 04Jan2008 Check    3 17Feb2008 Check
3 19Mar2008 Check    3 19Apr2008 Check
3 25May2008 Check    3 23Jun2008 Transfer
3 21Jul2008 Transfer 3 15Aug2008 Transfer
3 11Sep2008 Check    3 19Oct2008 Transfer
;
run;

%let DSin=Trans;
%let IDVar=CustID;
%let XVar=PayType;
%let DSout=ModePayType;

%VarMode(&DSin,  &IDVar, &XVar, &DSout);


二维码

扫码加我 拉你入群

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

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

关键词:code 如何理解 COD ODE sql classic create 如何

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 14:31