在 SAS 中创建表

问题描述 投票:0回答:1

我必须根据这些输入在 SAS 中创建一个表。

la grande vadrouille Louis de Funès 16 1966 A V 7
le mur de l’atlantique Jean Poiret 14 1970 AB 6
le cercle rouge Alain Delon 20 1970 Z A 8
le corniaud Louis de Funès 14 1965 SD 4
le chanteur de mexico Luis Mariano 12 1956 A B 5
la traversée de Paris Jean Gabin 19 1958 S 2

这段代码给了我正确的结果,但我必须添加空格以使每个变量中的每个值具有相同的长度。

DATA DMExo1.Q1;
INPUT Film  $CHAR22. Acteur $15. Note 39-40 Annee 41-45 Code $ 46-49 Ordre ;
CARDS;
la grande vadrouille   Louis de Funès 16 1966 A V 7
le mur de l’atlantique Jean Poiret    14 1970 AB  6
le cercle rouge        Alain Delon    20 1970 Z A 8
le corniaud            Louis de Funès 14 1965 SD  4
le chanteur de mexico  Luis Mariano   12 1956 A B 5
la traversée de Paris  Jean Gabin     19 1958 S   2
;RUN;

有没有办法在不改变输入的情况下获得结果?我必须使用卡。 非常感谢!

到目前为止,放置空格是唯一对我有用的方法。我不知道我的老师是否允许我们更改输入,所以如果我能找到更好的答案,我会很高兴

sas
1个回答
0
投票

如发布的那样,因为没有明显的字段分隔符,并且正如您所说,布局不固定。没有简单的方法可以只

INPUT
列。

您可以假设电影名称始终为小写字母并且演员名称始终以大写字母开头来解析数据。

这是使用正则表达式进行解析的一种方法。

data want ;
  length Film $22 Acteur $15 Note 8 Annee 8 Code $8  Ordre 8 ;

  rx = prxparse('m/^(.*?)\s+([A-Z].*?)\s+(\d+)\s+(\d+)\s+(.+?)\s(\d+)/') ;

  input ;
  if prxmatch(rx, _infile_) then do ;
    Film   =       prxposn(rx,1,_infile_) ;
    Acteur =       prxposn(rx,2,_infile_) ;
    Note   = input(prxposn(rx,3,_infile_), best.) ;
    Annee  = input(prxposn(rx,4,_infile_), best.) ;
    Code   =       prxposn(rx,5,_infile_) ;
    Ordre  = input(prxposn(rx,6,_infile_), best.) ;
  end;
  else
    Acteur = 'Could not parse' ;

  drop rx ;
datalines ;
la grande vadrouille Louis de Funès 16 1966 A V 7
le mur de l’atlantique Jean Poiret 14 1970 AB 6
le cercle rouge Alain Delon 20 1970 Z A 8
le corniaud Louis de Funès 14 1965 SD 4
le chanteur de mexico Luis Mariano 12 1956 A B 5
la traversée de Paris Jean Gabin 19 1958 S 2
;

其他人可能会展示使用保留输入的方法

INPUT ... @

© www.soinside.com 2019 - 2024. All rights reserved.