作者west1996 (焦了六年变脆了)
看板Statistics
标题Re: [程式] SAS配对如何配到最像的1笔资料?
时间Thu Jul 7 15:55:05 2011
※ 引述《JoJoHuang (Mr.小乔)》之铭言:
: [软体程式类别]:
: SAS
: [程式问题]:
: 利用SAS配对实验组与控制组时,
: 如何只配到指定变数最相近的1笔控制资料?
: [软体熟悉度]:
:
: 低,只会用简单的指令,例如OLS,常常程式码写一堆。
: [问题叙述]:
: 有在板上搜寻配对,知道可以用SQL进行配对,
: 并且可以设定配对的变数及其上下限。
: 例如:若控制组的年龄在实验组的加减1范围内则进行配对。
: 但是这样可能会配对到很多笔资料,
: 而网路搜寻到的一些方法是随机选取1笔。
: 想请问可以设定配对到最相近的1笔资料吗?
: 例如说:指定用A变数作为配对变数,
: 配对的上下限是正负10%内,
: 但是只配对到最相近的那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.112.117.131
1F:推 lsshno1:good! 07/07 21:20
2F:推 JoJoHuang:谢谢大大的指教,小弟感激不尽>"< 07/08 00:32
3F:推 wlsherica:推~~~ 07/08 19:13