【发布时间】:2019-11-13 04:19:12
【问题描述】:
从 SAS 中的现有字符串中提取格式为 yyyymmdd 的日期戳的最佳方法是什么?
根据我的阅读,最简单的方法似乎是使用带有prxmatch 函数的正则表达式来替换所有但模式。
- 假设字符串中唯一的 8 位模式是我的日期,所以
[0-9]{8}模式就足够了。
这是我用字符串 empty 替换 8 位模式的内容(为了便于阅读):
data b(keep=have want);
/* HAVE */
have = '&libroot_hr./import/sxh3j900/20190702_SXH3J900_DWH_Adresse.txt';
regexp = 's/[0-9]{8}/empty/';
times = -1; /* -1: replace all occurences */
/* WANT */
want = prxchange(regexp, times, have);
/* Result
'&libroot_hr./import/sxh3j900/empty_SXH3J900_DWH_Adresse.txt'
*/
run;
我怎样才能改变这个,所以它用字符串empty替换所有但任何9位数的模式?
【问题讨论】:
-
字符串可以有多个 8 位的字符串吗? 8位数字的字符串是否需要独立于其他数字?还是要匹配较长数字字符串中的 8 位数字?
-
假设字符串中唯一的 8 位模式是我的日期。日期字符串将被非数字字符包围。会有其他数字(在我的示例中为
3和900),但没有其他8 个或更多连续数字的字符串。因此[0-9]{8}应该足以找到我的字符串(但我需要反向并找到所有 but 所说的字符串) -
那为什么不直接把日期字符串取出来写回变量呢?
-
你的意思是像 Aurieli 的解决方案?我还不太确定什么时候使用哪个 prx-function... 来测试一下!