我想从sas中的字符串中分离名字、姓氏和年龄
输入:我想从sas中的字符串中分离名字、姓氏和年龄,sas,Sas,输入: David30Miller Jhonty45Rhodes Ahsley63Cummins 所以first name变量应该包含年龄之前的字符,即David age应该包含数字,即30,last name应该包含Miller 所需输出: FirstName Age Last name David 30 Miller Jhonty 45 Rhodes Ahsley 63 Cummins |string |age
David30Miller
Jhonty45Rhodes
Ahsley63Cummins
所以first name变量应该包含年龄之前的字符,即David age应该包含数字,即30,last name应该包含Miller
所需输出:
FirstName Age Last name
David 30 Miller
Jhonty 45 Rhodes
Ahsley 63 Cummins
|string |age |first_name |last_name
|David30Miller |30 |David |Miller
|Jhonty45Rhodes |45 |Jhonty |Rhodes
|Ahsley63Cummins |63 |Ahsley |Cummins
有人能帮忙吗?步骤1:使用压缩(字符串,,“kd”)提取年龄(其中kd压缩所有留下年龄的字符值)
第2步:使用年龄作为扫描功能的参数,以生成名字和姓氏。扫描(,):第一个参数是要处理的值,第二个参数是要提取字符串的哪一部分,第三个参数是在本例中用于区分(年龄)的符号
data abc;
input string $50.;
cards;
David30Miller
Jhonty45Rhodes
Ahsley63Cummins
;
run;
data abc;
set abc;
age = input(compress(string,,"kd"),best.);
first_name =scan(string,1,age); /*or scan(string,1,,"d");*/
last_name = scan(string,2,age); /*or scan(string,2,,"d");*/
run;
我的输出:
FirstName Age Last name
David 30 Miller
Jhonty 45 Rhodes
Ahsley 63 Cummins
|string |age |first_name |last_name
|David30Miller |30 |David |Miller
|Jhonty45Rhodes |45 |Jhonty |Rhodes
|Ahsley63Cummins |63 |Ahsley |Cummins
如果有任何疑问,请告诉我,您也可以使用Prxchange,如下所示。下面是关于代码的简要讨论
^([a-z]+)([0-9]+)([a-z]+)$ --- ^ means starting ^([a-z]+) this is group1 with
alphabets
([0-9]+) is group2 with numbers only
([a-z]+)$ is group3.
$1 represents group1 which can replace everything with group 1 by using /$1/
$2 represents group1 which can replace everything with group 2 by using /$2/
$3 represents group1 which can replace everything with group 3 by using /$3/
在第一个场景中,我们将所有内容替换为第一组给出您的名字等等
data want
set have;
firstname = prxchange('s/^([a-z]+)([0-9]+)([a-z]+)$/$1/i',1,trim(string));
age = input(prxchange('s/^([a-z]+)([0-9]+)([a-z]+)$/$2/i',2,trim(string)),8.);;
lastname = prxchange('s/^([a-z]+)([0-9]+)([a-z]+)$/$3/i',1,trim(string));;
run;
堆栈溢出中的一个好答案不仅仅是代码,而是解释如何教导,而不是给出。真不敢相信你否决了试图帮助你的人的正确答案。我在解释答案,如果你能再等30秒的话。无论如何,如果你不理解代码的任何部分,请告诉我。一直很乐意帮助。DV是我,不是OP。我认为这是一个更好的一点,但请阅读和;这在很大程度上仍然只是将代码提供给问了一个糟糕问题的人。我还建议,没有理由在扫描功能中使用年龄;这是糟糕的设计,因为它会导致不必要的num-char转换。使用
'd'
第四个参数代替。最后-在提交之前写一个完整的答案,不要只写一些东西然后计划改进。这被称为“西方最快的枪”,在这里被认为是非常不合适的。完成后提交答案;再等五分钟点击提交不会伤害任何人。我是这个平台的新手。我没想到像你这样有经验的人会说这样粗鲁的话。总之,我只是想帮助有需要的人。我会记住你的观点。你试过什么?现在这看起来不是一个好问题,特别是即使是少量的研究也至少能提出一些可能性。