SAS 問題集: 建立解法中, 部分題目已寫完數個解法. 可能會用DATA STEP, SQL, 或是 IML 來解決這些問題. 這三種不同的SAS 工具可以選擇來解決問題. 一般原則: 資料及統計值沒有順序闗係的, SQL 是比較好的選擇, 如果是Merge 類型, 不管條件單純或複雜的, SQL 是好選擇, 如果與前一筆後一筆有關係的. 可用先sort 後再用Data Step. 如果關係牽連很廣, 條件也複雜, 當資料不大可以一次讀得進來, 可用 IML, 可以一次搞定. 當然 SQL, Data step 都辦得到,只是中間檔要經巧妙的設計, 要加很多 dummy variables. 及多次中間檔轉換.
1. 如何取出分組最大值, 最小值, 總和, 平均數, 及各分組各有多少筆 ?
[解法1] 使用 SQL
[解法2] 使用 proc means
2. 想取出上一筆交易時間, 與本次交易的間隔;交易天才算, 週日例假不算
[解法]
3. 數字日期, SAS日期, 字串日期互換.
[解法]: 見 SAS 文字數字互轉, 時間相關, 各種常用格式
4. 取出最近半年的交易資料,
[解法] * by data set byear, bmonth 為要取的基準日;
data mm; /* if date is sas日期, */
set d;
begindate=mdy(bmonth,1, byear);
if bmonth>6 then enddate=mdy(bmonth-6,1,byear+1);
else enddate=(mbonth+6,1,byear);
if date > enddate | date<=begindate then delete;
run;
5. 原資料: 每週一筆. 希望可以取出前 半年的加總,
6. 如何算移動平均數5期
data ddd;
input vol ;
cards;
1.1
2.2
3.3
4.4
5.5
6
5
4
3
1.3
;run;
data A1;
set ddd;
mavg5=(vol+lag1(vol)+lag2(vol)+lag3(vol)+lag4(vol))/5;
run;
vol | mavg5 |
1.1 | |
2.2 | |
3.3 | |
4.4 | |
5.5 | 3.3 |
6 | 4.28 |
5 | 4.84 |
4 | 4.98 |
3 | 4.7 |
1.3 | 3.86 |
# 如何用 [SQL] 做?
# [解法] 使用 data step 對齊資料3.3 : [Data Step][Sas] 算移動平均數 .
7. 同上: 如果 mavg5 3.3 要與 1.1 對齊?
[解法] 使用 [IML] 解法
8. 對每一 ID 超過 12 筆才算加總
9. 原資料: 日資料 -> 要轉成週資料, 季資料, 月資料
10. 原資料: 日資料 -> 要與月統計資料合併
11. 2個資料檔合併的相關問題及技巧
12. 依某欄位排序分組, 分成數組
#使用rank
#使用 IML
#使用 SQL
13. 以當筆的日期為基礎, 選出範圈條件, 做加總.
左邊原資料, 右邊是想要的日期範圍, 及要的答案
20130505 3 -> 20130206~20130505 (一筆合條件, 3)
20130506 2 -> 20130207~20130506 (二筆合條件, 3+2)
20130715 5 -> 20130416~20130715 (三筆合條件, 3+2+5)
[SQL] 解法: [SQL] 日期範圍條件加總
14. [SAS] 隨機抽樣, 如何從一個資料集中隨機取出 N 個樣本?
---
相關知識: 了解有助於解決程式問題
[Data Step][Sas] 徹底研究 DATA STEP 運作原理及觀念
SAS Proc IML sample: 好用的 IML 例子.
[Cartesian product] 合併相關概念, 資料庫, sql,
留言列表