从一行 SPSS 语法中提取字符串并转换为日期

Extract string from a line of SPSS syntax and convert to date

我的语法中的文件句柄引用了一个文件夹,其中包含 YYYYDDMM 格式的版本号。例如,下面引用的 "v20170215"

file handle WORKING/name='ROOT\Uploads141001_20150930 v20170215'.

文件句柄的版本部分会根据需要处理的新数据定期更新。文件句柄 总是 以 "v" 结尾,后跟 YYYYMMDD 日期。

如何从文件句柄中自动提取最后一个 "YYYYMMDD" 字符串(例如“20170215”)并从中创建一个日期变量?

如果日期是数据中的字符串变量,我可以使用如下内容:

* Extract data, month, and year.
compute day = number(char.substr(...),F2.0).
compute month = number(char.substr(...),F2.0).
compute year = number(char.substr(...),F4.0).

* Compute date variable.
compute Version = date.mdy(month,day,year).
formats Version (adate10).
execute.

但考虑到它是一行 语法 我需要解析,我想我应该看看 Python,但我不知道如何解决这个问题。

假设语法来自一个文件,您可以使用 Python 打开和处理该文件,您可以在空格处拆分该行,使用切片获取最后一个字段的日期部分,然后将其输入 datetime.strptime() to parse the string into a datetime.date对象。

>>> from datetime import datetime    
>>> s = r"file handle WORKING/name='ROOT\Uploads141001_20150930 v20170215'."
>>> date_string = s.split()[-1][1:-2]
>>> datetime.strptime(date_string, '%Y%m%d').date()
datetime.date(2017, 2, 15)

我假设您无法从创建更新语法的同一来源获取更新参考作为数据(可能是更简单的解决方案)。
定义句柄后,您可以通过以下方式将该定义提取到数据中:

dataset declare  myhandle.
oms/select tables/if commands=['Show'] subtypes=['File Handles']/destination format=SAV outfile='myhandle'.
show handles.
omsend.
dataset activate myhandle.

这将打开一个名为 myhandle 的数据集,其中变量 Directory 将包含句柄中定义的文件的完整路径。从中你只需要提取你需要的字符串 - 看看这是否适合你:

compute Directory=char.substr(Directory,char.index(Directory," v")+2,10).

现在您已经有了所需的字符串,您可以继续将其转换为日期并将其匹配到您的数据中。