楼主: 脚在路上
2700 3

读取「数值尾端带有负号」的数字资料 [推广有奖]

  • 0关注
  • 0粉丝

博士生

8%

还不是VIP/贵宾

-

威望
0
论坛币
5431 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
10511 点
帖子
221
精华
0
在线时间
241 小时
注册时间
2009-6-30
最后登录
2023-10-31

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
读取「数值尾端带有负号」的数字资料

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结果,每个数值都已经将负号放在前端



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:trailing informat compress informa Reverse 资料 数字 数值 负号 尾端

沙发
viterbi 发表于 2010-6-13 10:30:53 |只看作者 |坛友微信交流群
好!学习了。

使用道具

藤椅
andy520 发表于 2010-6-13 10:50:26 |只看作者 |坛友微信交流群
good example

使用道具

板凳
sailingyf 发表于 2010-6-13 14:52:55 |只看作者 |坛友微信交流群
脚在路上 发表于 2010-6-12 15:30
读取「数值尾端带有负号」的数字资料

SAS Taiwan news flash新闻中有一篇技术文件
讨论读取「数值尾端带有负号」的数字资料

从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结果,每个数值都已经将负号放在前端



请问:如果    “括号”将数字括起来表示为负值者→用TRAILSGNw.   
那么为什么下面程序中用的是    neg_paren:comma6??
应该是笔误吧,那么到底用commaw  还是 trailsgnw呢?  
谢谢

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-27 12:51