2015-11-17 99 views
1

我有一列数据后,让我们说,它看起来是这样的:SAS:删除所有文字字符

This is text: part 2 
This is text 
This is also text: part 3 

我需要删除一切后:使所有三行数据将显示:

This is text 
This is text 
This is also text 

有没有人知道如何做到这一点在SAS?我通常会删除标点,等等......但还没有需要删除一个字符后的所有内容。

任何指导将不胜感激 - 谢谢。

回答

5

SCAN()功能会为这项工作做得很好。

want = scan(have,1,':'); 

唯一的问题可能是如果文本以冒号开头。如果文本以冒号(或多个冒号)开头,则SCAN(have,1,':')将返回引导冒号后面的第一个文本块。如果将修饰符'M'添加到SCAN()调用中,那么它会将额外的冒号视为表示缺少的值并返回一个空字符串。

want=scan(have,1,':','m'); 
+0

能使用'扫描(有,-2, ':')',如果它会以一个冒号开始,不是吗?虽然如果它不包含冒号,那么它会失败......没有理想的解决方案,我猜没有检查。 – Joe

+0

@joe更新了解决领先冒号的问题。 – Tom

+0

啊,我忘记了M修饰符 - 非常好。 – Joe

0
data test; 
a1='This is text: part 2'; 
a = substr(a1,1,index(a1,':') - 1); 
output; 
run;