Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement 如何从具有不同字数的异构变量中提取中间名?_If Statement_Sas - Fatal编程技术网

If statement 如何从具有不同字数的异构变量中提取中间名?

If statement 如何从具有不同字数的异构变量中提取中间名?,if-statement,sas,If Statement,Sas,我在SAS工作,我有以下数据集,我需要帮助从不同字数的异构变量中提取中间名 我以前看过,但它对我不起作用。 我的名为统计学家的数据框架只有一个变量 全名 罗纳尔多·费舍尔 H.O.Meir Lee 莎拉·金·伊万 马可·西纳 在名为middle的新列中,只有姓和名的名称应为空。 我尝试了以下代码,但不起作用: data statisticians; length middle $10; set statisticians; if count = 2 then middle=.;

我在SAS工作,我有以下数据集,我需要帮助从不同字数的异构变量中提取中间名

我以前看过,但它对我不起作用。 我的名为统计学家的数据框架只有一个变量

全名
罗纳尔多·费舍尔

H.O.Meir Lee
莎拉·金·伊万
马可·西纳

在名为middle的新列中,只有姓和名的名称应为空。 我尝试了以下代码,但不起作用:

data statisticians; length middle $10;   set statisticians;    if
count = 2 then middle=.;    if count = 3 then middle= scan(name,2);   
if count = 4 then middle=scan(name,2);  run;

任何帮助都将不胜感激。

正则表达式是您需要的。你可能需要摆弄它,或者在网上找到一个涵盖更多案例的。是测试它们的好资源

data names;
  input Full_name $ 1-50;
  datalines;
Ronaldo Al Fisher

H. O. Meir Lee
Sara Kim Ivan
Marco Sina
;

data names_with_middle;
  set names;
  regex = prxparse('s/^(.+?\s+)(\w+)\s+(\w+)$/$2/');
  if prxmatch(regex, strip(full_name)) then 
    middle_name = prxchange(regex, 1, strip(full_name));
  drop regex;
run;
结果:

Obs   Full_name            middle_name
1     Ronaldo Al Fisher    Al
2  
3     H. O. Meir Lee       Meir
4     Sara Kim Ivan        Kim
5     Marco Sina

如何区分中间名和双名或双姓?