我正在尝试使用 SAS PRX 函数从我的数据集中提取子字符串。但它只返回完全匹配,而我需要它更灵活并提取匹配各种条件的那些。
我在下面复制了我的数据。如您所见,我的数据中的一个变量是“brandmodel”,其中包含特定相机的品牌名称和型号。我需要为模型#s 设置一个单独的列。所以我使用 PRX 函数来提取它们,因为它们通常遵循以下模式之一:
例如:JX100 或 JX10 或 JX1(即 1-2 个字母,后跟 1-3 位数字。我的程序(复制到数据下方)可以处理。但我遇到的问题是:如何提取这些模型#是字母与数字用空格或连字符隔开的地方,我如何将它们提取到与它们完全一样的“模型”列中?另外,一些观察没有模型#s,如何我可以将它们设置为丢失而不是完全丢弃吗?
Brandmodel|Price
iTwist F124 Digital Camera -red|49.00
Vivitar IF045 Digital Camera -Blue|72.83
Liquid Image Underwater Camera Mask|128.00
Impact Series Video Camera MX Gogglesâ„¢|188.00
Olympus VR 340 Silver|148.00
Olympus TG820 Digital Camera Black|278.00
Olympus VR 340 16MP 10x 3.0 LCD Red|148.00
Vivitar VX137-Pur Digital Camera|39.00
Olympus SZ-12 Digital Camera -Black|198.00
Olympus VG160 Digital Camera Red|98.00
Olympus VR340 Purple|148.00
Olympus TG820 Digital Camera Silver|298.00
Olympus TG820 Digital Camera Blue|278.00
Olympus VG160 Digital Camera Orange|98.00
Olympus TG820 Digital Camera Red|298.00
Fujifilm FinePix AX500 Red|78.63
Canon A2300 Silver|98.63
Canon A810 Red|75.00
Nikon Coolpix S2600 Digital Camera - Red|88.00
Nikon Coolpix L25 Digital Camera - Silver|82.00
Casio Exilim ZS10BK|128.00
Olympus TG-310 14 MP blue Digital Camera|148.00
Hipstreet Kidz Digital Camera - Blue|14.93
Casio Exilim ZS10PK|128.00
Olympus TG-310 14 MP Digital Camera orange|148.00
SAS 程序
data walnov21p2;
length brandmodel $ 80;
infile "G:\File2\data\store_nov21\storenv21p2.csv" firstobs=2 dlm="|" dsd;
input brandmodel price;
re= prxparse('/[[:alpha:]]{1,3} \d{1,4}/');
if prxmatch(re, brandmodel) then
do;
model=prxposn(re, 0, brandmodel);
output;
end;
run;