string - 在SPSS中从字符串中删除非数字
问题描述
考虑以下数据:
如您所见,变量的值本质上是数字,但其中一些包含文本。我已经尝试了我能想到的所有排列do repeat...end repeat
,试图删除非数字值并只留下数字,但没有成功。
是否有一些语法可以做到这一点?是否有一个函数可以检查 substr 是否包含任何一组字符?然后我可以创建一个代表所有数字的集合,遍历字符串中的每个字符,如果它不在集合中,则将其替换为 null。
解决方案
IBM 支持上的这个答案回答了一个有点类似的问题: https ://www.ibm.com/support/pages/removing-unwanted-characters-strings
您将需要搜索更多字符(整个 az、AZ 以及可能还有一些非字母字符),但它应该可以。如果您使用的是 SPSS 223 或更新版本,您可能还想使用更新的CHAR.INDEX
和CHAR.REPLACE
函数;请参阅有关它们的官方 IBM SPSS 文档:
https ://www.ibm.com/support/knowledgecenter/en/SSLVMB_23.0.0/spss/base/syn_transformation_expressions_string_functions.html
稍后编辑(在 OP 的澄清和建议之后:
在 IBM 示例中您需要调整的是 2 件事:
在 k 次迭代后硬编码循环退出(不是在 #I=0 时 - 它将在它没有找到的第一个字符处停止)。在下面的示例中,k 设置为 100。
指定要删除的所有字符:a 到 z、空格、引号(作为 2 个连续的引号)等;任何你认为你可能想要清理的东西。那么这应该可以工作(实际上是stackoverflow,格式化目前似乎无法正常工作)
计算 x=LOWER(x)。
循环 k=1 到 CHAR.LENGTH(x)。
计算 #I = CHAR.INDEX(X,'abcdefghijklmnopqrstuvwxyz+, ''',1)。
如果 #I > 0 X=CONCAT(CHAR.SUBSTR(X,1,#I-1), CHAR.SUBSTR(X,#I+1))。
结束循环。
执行。
推荐阅读
- javascript - 为什么“this”在过滤器中未定义?
- https - axios CDN 使用 pfx https 证书
- jupyter-notebook - 使用 Jupyter 笔记本连接 MySQL 时出错
- spring-retry - spring 使用请求中的自定义布尔值重试
- python - 如何根据其中一列的子字符串合并 Pandas 数据框?
- loops - BigQuery 中的按数组循环和联合循环结果
- c - 几秒钟后如何终止scanf?
- c - C typedef 定义函数
- python - MQTT 不断重连
- javascript - angularjs + ng-repeat 没有把值放在桌子上