看板 Statistics 關於我們 聯絡資訊
大略寫出你要的部分,不過應該可以更精簡,但..目前想不出來 > < data a1; input v1$ ; cards; 00280061 00280061 00280069 ; run; proc sql ; create table t1 as select substr(v1,3,2) as s1,substr(v1,5,2) as s2,substr(v1,7,2) as s3 from a1; quit; proc print data=t1; run; proc sql; create table t2 as select s1, case when s1 eq '28' then 's' when s1 eq '00' then '0' when s1 eq '01' then '1' else 'z' end as q1, s2, case when s2 eq '28' then 's' when s2 eq '00' then '0' when s2 eq '01' then '1' else 'z' end as q2, s3, case when s3 eq '28' then 's' when s3 eq '00' then '0' when s3 eq '01' then '1' else 'z' end as q3 from t1; quit; proc print data=t2; run; proc sql; create table t3 as select catt(q1,q2,q3) as Q1 from t2; quit; proc print data=t3; run; ※ 引述《MOONY135 (談無慾)》之銘言: : [軟體程式類別]: : 請填入軟體程式類別,例如:SAS、SPSS、R、EVIEWS...等 : SAS : [程式問題]: : 資料處理、迴歸、敘述統計、logistic、probit...等 : 資料處理 : [軟體熟悉度]: : 請把以下不需要的部份刪除 : 中(3個月到1年) : [問題敘述]: : 格式大概長這樣 想從資料庫裡面抓的學號格式改成常見的格式 : 學號 切成 不需要 A1 B1 C1 : 00280061 -> 00 28 00 61 : A1與B1轉換成學號的格式是這樣 : 00~09 -> 0~9 A~Z -> 10~36 : C1則是完全取用 : A1_TRANS B1_TRANC C1 : 所以這樣轉換後 28->S 00->0 61->61 合併起來之後 : 會變成S061 : 目前我是做了另外一張轉換表欄位分別是 : A1 A1_TRANS : 00 0 : 01 1 : . . : . . : . . : 28 S : . . : . . : 36 Z : 想請問有沒有辦法用轉換表去把A1 B1轉換後 創出新的表格 : 目前是把切開的學號表跟轉換表INNER JOIN 然後用WHERE抓 但會出現奇怪的東西 : [程式範例]: : 雖然張貼程式很可怕,但基本上有些程式還是要張貼才能解決 : PROC SQL; : CREATE TABLE WORK.TEST1 AS : SELECT '學號'n, : Substr('學號'n, 3,2) as 'A1'n, : Substr('學號'n, 5,2) as 'B1'n, : Substr('學號'n, 7,2) as 'C1'n : FROM LASRLIB.'學號_TEST'n : ; : QUIT; : /*inner join之後在 把需要的轉換取出來*/ : proc sql; : CREATE TABLE WORK.TEST2 AS : select '學號'n, : catx('','A1_TRANS'n,'B1_TRANS'n,'C1'n) as '轉換過的學號'n : from 轉換表,TEST1 : where TEST1.A1=轉換表.A1 and TEST1.B1=轉換表.A1 : ; : quit; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.34.5.174 ※ 文章網址: http://www.ptt.cc/bbs/Statistics/M.1409245344.A.5C0.html
MOONY135: 這個是我第一版的結果... 08/29 01:51