看板 Statistics 關於我們 聯絡資訊
※ 引述《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