作者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
推 lsshno1:good! 07/07 21:20
推 JoJoHuang:謝謝大大的指教,小弟感激不盡>"< 07/08 00:32
推 wlsherica:推~~~ 07/08 19:13