我有一个数据集,其中包含带有公司名称的变量。有时,这些公司名称的最后 11 个字符包含个人 ID。
所以我想用最后 11 个字符创建一个新变量,并且仅当它们是数字时才保留它。
这是我的数据集的示例:
DATA have;
INPUT CompanyName;
DATALINES;
ASASD FSFASD ASDFASDFASD
ASDFAS ADFASDF FDAFADFADF 01232143211
ADAFSAD ADSFASDF 03331286532
LKJLKJK KLKJKJL
LLKJLKJ FDAFASDF 75423243211
;
RUN;
我想要一个新变量,其中第 1 行和第 4 行缺少值,第 2、3 5 行缺少最后 11 个数值 ( 01232143211
, 03331286532
, 75423243211
)。
我尝试了什么?
PROC SQL;
CREATE TABLE WANT AS
SELECT
CompanyName,
case when prxmatch('/^\d{11}$/', substr(CompanyName, length(CompanyName) - 10)) > 0
then substr(CompanyName, length(CompanyName) - 10)
else "" end as ID_OWNER,
FROM have;
QUIT;
但我有一个新变量,其中包含所有缺失值。
使用 SAS 代码而不是 SQL 代码更容易完成。
首先确保创建示例数据的数据步骤确实有效。
然后,如果字符串足够长,有 11 个字符,则取出最后 11 个字符并确保它们都是数字。
结果
您可能还想删除存在的 id 值。因此,请在最后一个 IF 语句之后添加此 ELSE 语句。
结果