作者FallAugust (八月秋风)
看板Statistics
标题Re: [程式] SAS配对如何配到最像的1笔资料?
时间Tue Jan 3 15:16:10 2012
以下真的受益匪浅,有一个延伸的问题请教
因为有的时候配到最适合的那个对照公司因为资料可得性不能用,
这时候就要找第二顺位了,
之前我用macro作配对的时候,可以利用排序和 _n_ 的设定
留下最相近的五笔资料备用,或者作match-portfolio
想请问在sql里面如果想留下最相近的五笔配对资料,应该要怎麽下指令呢?
谢谢
--
※ 引述《west1996 (焦了六年变脆了)》之铭言:
: ※ 引述《JoJoHuang (Mr.小乔)》之铭言:
: : 但是只配对到最相近的那1笔资料。
: : 目的:计算调整控制组销售(Sales)後的异常Sales。
: : 控制组的筛选条件:公司规模(TA)
: : 配对逻辑:TA-10% ~ TA+10%
: : (例如:A公司的规模是100,符合配对的控制组公司的TA应介於90~110)
: : 每一个公司会有当年度的Sales与TA,假设实验组A公司的Sales是200,TA是100。
: : 另有控制组B公司与C公司,B公司的Sales是150,TA是95;
: : C公司的Sales是130,TA是101。
: : 若设定配对上下限是TA-10% ~ TA+10%,B公司与C公司皆符合配对条件。
: : 然而,这里只想要配对"TA介於上下限内"且"最相近的公司",
: : 在此逻辑下,A公司应该与C公司配对,因为C公司的TA=101,与A公司的TA=100最相近。
: : 因此,A公司当年度的异常Sales应为200-130=70。
: : 目前只会设定上下限,可是不会设定"只配对最相近的公司"。
: : 实例:
: : data study control;
: : infile cards;
: : rand_num=uniform(0);
: : input id study TA Sales @@;
: : if study=1 then output study;
: : else output control;
: : cards;
: : 1 1 100 200
: : 2 1 200 400
: : 3 0 95 150
: : 4 0 101 130
: : 5 0 190 230
: : ;
: : Run;
: : proc sql;
: : create table controls_id as
: : select
: : one.ID as study_id,
: : two.ID as control_id,
: : one.TA as study_TA,
: : two.TA as control_TA,
: : one.Sales as study_sales,
: : two.Sales as control_sales,
: : one.rand_num as rand_num
: : from study one, control two
: : where (two.TA between one.TA*1.1 and one.TA*0.9)
: group by one.id
: having abs(one.ta-two.ta)=min(abs(one.ta-two.ta))
: order by one.id
: ;
: 在分号前面加上上面这三行就行了,不过如果运气不好刚好有超过两笔TA的差相同的话,
: 全部都会列出来
: 除非另外有筛选条件...
: : Run;
: 另外
: 用sql语法时要用quit来结尾
: 用run的话sql不会真的关掉
: : 在此例中,id 1的观测值是实验组,依据TA*0.9~TA*1.1的筛选条件,
: : 他会与id 3与id 4配对,但是我想请问能否指定只配对到TA最相近的对照组,
: : 也就是id 4呢?
: : 例外有两个小问题想请教一下:
: : 1. rand_num是甚麽意思呢?
: : 2. sas log回覆说 The execution of this query involves performing one or more
: : Cartesian product joins that can not be optimized.是甚麽意思呢?
: 这个log只是说上面那一段sql跑的时候因为资料结构的限制所以没办法最佳化
: 不过还是可以跑
: 所以除非你很要求程式效能
: 不然可以忽略不看
: : 我Match完後的资料如下:
: : study_id control_id study_TA control_TA study_Sales control_sales rand_num
: : 1 3 100 95 200 150 0.2469
: : 1 4 100 101 200 130 0.2469
: : 2 5 200 190 400 230 0.0509
: : 谢谢大家的指教!!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.55.1