从SPSS语法的行中提取字符串,然后转换为日期



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

file handle WORKING/name='ROOTUploads20141001_20150930 v20170215'.

根据需要处理的新数据,通常会更新文件句柄的版本。文件句柄始终以" v"结尾,然后是yyyymmdd日期。

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

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

* 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.

但是,鉴于这是语法的一行

我假设您无法从创建更新的语法的同一来源获取更新的引用(可能是一个更容易的解决方案)。
定义手柄后,您可以通过这种方式将该定义提取到数据中:

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).

现在您拥有所需的字符串,可以继续并将其变成日期并将其匹配到您的数据中。

假设语法来自您可以使用Python打开并处理的文件,您可以在Whitespace上拆分线路,使用切片抓住最后一个字段的日期部分进入datetime.strptime(),将字符串解析为datetime.date对象。

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

相关内容

最新更新