[程式] SAS配對如何配到最像的1筆資料?
[軟體程式類別]:
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);
Run;
在此例中,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.是甚麼意思呢?
我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.186.244
推
07/06 17:44, , 1F
07/06 17:44, 1F
→
07/06 17:45, , 2F
07/06 17:45, 2F
→
07/06 17:45, , 3F
07/06 17:45, 3F
→
07/06 18:17, , 4F
07/06 18:17, 4F
推
07/06 18:29, , 5F
07/06 18:29, 5F
→
07/06 19:34, , 6F
07/06 19:34, 6F
※ 編輯: JoJoHuang 來自: 140.116.186.244 (07/06 21:09)
→
07/06 23:48, , 7F
07/06 23:48, 7F
→
07/07 00:14, , 8F
07/07 00:14, 8F
→
07/07 00:14, , 9F
07/07 00:14, 9F
→
07/07 00:15, , 10F
07/07 00:15, 10F
→
07/07 08:45, , 11F
07/07 08:45, 11F
→
07/07 10:12, , 12F
07/07 10:12, 12F
→
07/07 10:13, , 13F
07/07 10:13, 13F
→
07/07 11:20, , 14F
07/07 11:20, 14F
→
07/07 14:14, , 15F
07/07 14:14, 15F
→
07/07 14:14, , 16F
07/07 14:14, 16F
→
07/07 14:19, , 17F
07/07 14:19, 17F
討論串 (同標題文章)