从 SPSS 中的字符串中删除非数字

Removing non-numbers from a string in SPSS

考虑以下数据:

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

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

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

您将有更多的字符要搜索(整个 a-z、A-Z 以及可能还有一些非字母字符),但它应该可以工作。 如果您使用的是 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 示例中需要调整的是两件事:

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

  2. 指定要删除的所有字符:a 到 z、space、引号(作为 2 个连续的引号)等;任何您认为可能需要清洁的东西。那么这应该可以工作(确实是 st​​ackoverflow,格式化目前似乎无法正常工作)

    计算 x=LOWER(x)。

    循环 k=1 到 CHAR.LENGTH(x).

    计算#I = CHAR.INDEX(X,'abcdefghijklmnopqrstuvwxyz+, ''',1).

    IF #I > 0 X=CONCAT(CHAR.SUBSTR(X,1,#I-1), CHAR.SUBSTR(X,#I+1)).

    循环结束。

    执行。