从 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.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 示例中需要调整的是两件事:
在 k 次迭代后对循环退出进行硬编码(不是在 #I=0 时——它将在找不到的第一个字符处停止)。在下面的示例中,k 设置为 100。
指定要删除的所有字符:a 到 z、space、引号(作为 2 个连续的引号)等;任何您认为可能需要清洁的东西。那么这应该可以工作(确实是 stackoverflow,格式化目前似乎无法正常工作)
计算 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)).
循环结束。
执行。
考虑以下数据:
如您所见,变量的值本质上是数字,但其中一些包含文本。我已经尝试了我能想到的每一种排列 do repeat...end repeat
来尝试删除非数字值并只保留数字,但没有成功。
是否有一些语法可以做到这一点? 是否有检查 substr 是否包含一组字符的函数?然后我可以创建一个代表所有数字的集合,遍历字符串中的每个字符,如果它不在集合中,则将其替换为空值。
这个关于 IBM 支持的回答回答了一个有点类似的问题: https://www.ibm.com/support/pages/removing-unwanted-characters-strings
您将有更多的字符要搜索(整个 a-z、A-Z 以及可能还有一些非字母字符),但它应该可以工作。
如果您使用的是 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 示例中需要调整的是两件事:
在 k 次迭代后对循环退出进行硬编码(不是在 #I=0 时——它将在找不到的第一个字符处停止)。在下面的示例中,k 设置为 100。
指定要删除的所有字符:a 到 z、space、引号(作为 2 个连续的引号)等;任何您认为可能需要清洁的东西。那么这应该可以工作(确实是 stackoverflow,格式化目前似乎无法正常工作)
计算 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)).
循环结束。
执行。