看板 Statistics 關於我們 聯絡資訊
以下真的受益匪淺,有一個延伸的問題請教 因為有的時候配到最適合的那個對照公司因為資料可得性不能用, 這時候就要找第二順位了, 之前我用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