我想从3到9位数字中删除破折号。这些数字中有一定百分比的前导零。我尝试使用Compress函数,但是这也消除了零。最好的功能是什么?
答案 0 :(得分:1)
我了解您的“数字”实际上是带有数字和破折号的代码,并且您只希望保留数字,因此您需要进行字符串处理。
SAS中的compress
函数具有第二个(可选)参数。如果未指定,则该功能将删除所有空白字符。如果这样做,它将删除指定的字符。所以尝试
no_dash = compress(with_dash, '-');
或者,您可以使用第三个参数(也是可选参数)删除所有非数字字符
no_dash = compress(with_dash, '0123456789', 'k');
k
指定保留而不是删除指定的字符。您可以通过在第三个参数上添加d
来缩短此时间,并告诉SAS将所有数字都添加到第二个参数上:
no_dash = compress(with_dash, '', 'dk');
答案 1 :(得分:0)
如果已将压缩结果(通过隐式转换)存储在数字变量中,则该变量可能需要一种格式才能获得所需的结果。
data _null_;
my_dashed_text = '000-90-123';
my_compressed_text = compress(my_dashed_text, '-');
attrib my_num_var
length = 8
format = z9.
;
my_num_var = compress(my_dashed_text, '-');
put (_all_) (=/);
run;
------ LOG -----
NOTE: Character values have been converted to numeric values at the places given by:
(Line):(Column).
36:16
my_dashed_text=000-90-123
my_compressed_text=00090123
my_num_var=000090123
Z
数字格式告诉SAS在显示数字时添加前导零,以填充到指定宽度 。格式是固定宽度,因此来自"123-456"
和"0-1-2-3-45-6"
的my_num_var将显示Z9
的{{1}}格式值。通过单一格式规范(例如000123456
)呈现时,SAS格式无法使数字值看起来像123456
或0123456