moonleo
比如我有“ABACAVIR SULFATE ” “ ABROTANUM TINCTURE ”。。。。我只想要空格前的字符, 怎么办?
应为空格前的部分长短不一,substr 不太好用
或许直接可以在读数据的时候就取空格前的?
我试过
input A$ B C$ D E$;
input A$ B C$ D E$@; 都不行,大侠们,该怎么样弄啊?
A B C D E
S0188708 188708 G006090 00609 ABACAVIR SULFATE
S0275124 275124 G070010 。 ABARELIX
S0294019 294019 G070020 。 ABATACEPT
S0083223 83223 G070030 。 ABCIXIMAB
S0284097 284097 G07004 。 ABROTANUM TINCTURE
S0051400 51400 G0700 。 ABSINTHIUM
王笑权
在input 后面定义宽度应该好使
losttemple
用函数,left
moonleo
[quote]引用第1楼王笑权于2008-06-01 16:27发表的“”:
在input 后面定义宽度应该好使[/quote]
这个不行吧,空格前的字符长度不一阿
moonleo
[quote]引用第2楼losttemple于2008-06-01 21:19发表的“”:
用函数,left[/quote]
我试了 a=ACAMPROSATE CALCIUM,
b=left(a)
结果b还是ACAMPROSATE CALCIUM。
?
losttemple
开始没看明白的你问题,用函数scan
王笑权
data a;
input A$ 1-8 B 10-16 C$ 18-26 D $ 26-31 E$ 32-43 ;
cards;
S0188708 188708 G006090 00609 ABACAVIR SULFATE
S0275124 275124 G070010 。 ABARELIX
S0294019 294019 G070020 。 ABATACEPT
S0083223 83223 G070030 。 ABCIXIMAB
S0284097 284097 G07004 。 ABROTANUM TINCTURE
S0051400 51400 G0700 。 ABSINTHIUM
;
proc print;
run;
SAS 系统 2008年06月02日 星期一 下午09时55分30秒 25
Obs A B C D E
1 S0188708 188708 G006090 00609 ABACAVIR
2 S0275124 275124 G070010 。 ABARELIX
3 S0294019 294019 G070020 。 ABATACEPT
4 S0083223 83223 G070030 。 ABCIXIMAB
5 S0284097 284097 G07004 。 ABROTANUM
6 S0051400 51400 G0700 。 ABSINTHIU
原数据歪斜太狠,已稍加修改
moonleo
data a;
input A$ 1-8 B 10-16 C$ 18-26 D $ 26-31 E$ 32-43 ;
cards;
S0188708 188708 G006090 00609 ABACAVIR SULFATE
S0275124 275124 G070010 。 ABARELIX
鄂,可能不太合适吧, 我其实有一万多个数据,有的数据是这个样子的.ACETOHYDROXAMIC ACID, first name 很长,所以这样可能不行,
还有没有别的办法?
scan怎么用.......我弄了半天reture 我空格
谢谢各位
moonleo
b=anyspace(NAME);
subn=substr(NAME,1,b);
我用这个倒是作出来了,但是有点小麻烦, 各位还见过什么简单直接的函数没?
abel
try trim or compress
王笑权
由于字符间空间交错穿插
用base 看来都没有办法完成这个任务
liuzzz6
SCAN is ok.
lwien007
如果你这个变量E是在数据集输入的时候是最后一个变量,那么不用作任何处理,直接得到的就是想要的结果,
如果不是最后一个变量,输入的时候需要用“ ”括起来然后再处理,具体处理可以用scan函数,绝对可以实现
也可以采用其他方法,例如采用混合输入,在E变量前边使用“列举”的输入方式,在E后边的变量输入的时候按列对齐,采用按列得输入方式
至于前边说的left,trim,compress等应该不能实现
用scan函数处理 E=scan(E,1)就可以