作者gogostay (Go)
看板Statistics
标题Re: [程式] SAS SQL 栏位内转换格式
时间Fri Aug 29 01:02:21 2014
大略写出你要的部分,不过应该可以更精简,但..目前想不出来 > <
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://webptt.com/cn.aspx?n=bbs/Statistics/M.1409245344.A.5C0.html
1F:→ MOONY135: 这个是我第一版的结果... 08/29 01:51