SAS Taiwan news flash新闻中有一篇技术文件
讨论读取「数值尾端带有负号」的数字资料
在SAS9版之前可以使用REVERSE函数,9版以后可以用TRAILSGN.w这款informate读取
以下分别举例
REVERSE函数
有一笔数值资料,尾巴带有负号。
现在想把负号抓到前面
data test;
input @1 chmt $ char8.; /*chmt变项从@1位置开始抓,设定为文字变项,即将变数数值以文字方式呈现*/
sign=SUBSTR(left(reverse(chmt)),1,1);/*利用reverse函数将文字排列顺序反转,且向左left靠,最后SUBSTR抓第一位*/
if sign='-' then
amount=input(compress(chmt,'-'),8.)*-1;/*接着将变项sign抓到”-”的利用COMPRESS函数压缩(去除)掉,然后用input函数将文字转成数值,最后乘以负1*/
else amount=input(chmt,8.);/*本来没有负号者就直接input函数转即可*/
keep chmt amount;/*保留chmt变项与amount变项*/
cards;
3010.05-
99.10-
70.35
0.00
549.22-
;
run;
因此转好就变成下面的输出
从SAS9版以后可以用TRAILSGN.w这款informate读取
TRANILSGN.w
可以用以下几种informate款来读取资料(这我没用过..真有趣)
- “负号”在前端→用w.
- “负号”在尾端→用COMMAw.读取且所得值需要乘以”-1,负1″
- “负号”在尾端→用TRAILSGNw.
- “括号”将数字括起来表示为负值者→用TRAILSGNw.
变项名称分别为:leading, trailing1, trailing2,
data test2;
input leading:4. trailing1:comma6.
trailing2:trailsgn2. neg_paren:comma6.;/*利用不同informate读取下列四个变项资料,leading已经是预期的格式因此不用多作informat设定,另外三个变数需要额外处理*/
trailing1=trailing1*-1;
cards;
-111 222- 3- (444)
;
run;
下面是output结果,每个数值都已经将负号放在前端