首页 > 解决方案 > 在SPSS中从字符串中删除非数字

问题描述

考虑以下数据:

示例数据 - 数字与文本混合

如您所见,变量的值本质上是数字,但其中一些包含文本。我已经尝试了我能想到的所有排列do repeat...end repeat,试图删除非数字值并只留下数字,但没有成功。

是否有一些语法可以做到这一点?是否有一个函数可以检查 substr 是否包含任何一组字符?然后我可以创建一个代表所有数字的集合,遍历字符串中的每个字符,如果它不在集合中,则将其替换为 null。

标签: stringreplacespss

解决方案


IBM 支持上的这个答案回答了一个有点类似的问题: https ://www.ibm.com/support/pages/removing-unwanted-characters-strings

您将需要搜索更多字符(整个 az、AZ 以及可能还有一些非字母字符),但它应该可以。如果您使用的是 SPSS 223 或更新版本,您可能还想使用更新的CHAR.INDEXCHAR.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 件事:

  1. 在 k 次迭代后硬编码循环退出(不是在 #I=0 时 - 它将在它没有找到的第一个字符处停止)。在下面的示例中,k 设置为 100。

  2. 指定要删除的所有字符: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))。

    结束循环。

    执行。


推荐阅读