Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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
[SAS]在一个数据步骤中读取具有多个级别的混合记录类型(.dat)_Sas - Fatal编程技术网

[SAS]在一个数据步骤中读取具有多个级别的混合记录类型(.dat)

[SAS]在一个数据步骤中读取具有多个级别的混合记录类型(.dat),sas,Sas,我有一个数据集(employeeinfo.dat),它看起来像(注意,除了这个,还有很多观察结果)如下: (Level1) Chief Executive Officer (Anthony Miller ) $433,800 (Level2) Chief Sales Officer (Harry Highpoint )

我有一个数据集(employeeinfo.dat),它看起来像(注意,除了这个,还有很多观察结果)如下:

(Level1) Chief Executive Officer  (Anthony Miller )                                                    $433,800
     (Level2) Chief Sales Officer  (Harry Highpoint )                                                  $243,190
              (Level3) Vice President  (Henri Le Bleu )                                                $194,885
                       (Level4) Director  (Reginald Steiber )                                          $156,065
                                (Level5) Sales Manager  (Dennis Lansberry )                             $84,260
                                         (Level6) Sales Rep. I  (Saunders Briggi )                      $26,335
                                (Level5) Senior Sales Manager  (Louis Favaron )                         $95,090
                                         (Level6) Sales Rep. I  (Harold Boulus )                        $26,035
我需要将其读入SAS,以便将数据拆分为以下变量:级别、职务、姓名和薪水

我的问题是,在整个数据中指示不同的级别(没有设置模式)。也就是说,我不能想当然地认为任何变量都是从输入数据中的任何特定位置(列)开始的,也不能为大多数变量指定长度,因为它们是不同的

以下是我微弱的尝试(至少我在第一个条目中正确加载了),只是为了确保我完全掌握了这个概念:

data emp;
    infile 'employeeinfo.dat';
    input @1 position $9.
          @10 jobtitle $24.
          @35 name $72.
          @108 salary dollar8.;
run;
这将正确加载第一个条目,但显然对其余条目无效

你有什么想法吗


注意:这样做有一个限制。我正在使用的文本指出,本练习的目标是提供使用没有分隔符的固定宽度原始数据文件的经验。解决方案必须有多个带有指针控件的输入语句。

职务和姓名之间的间距始终至少为两个空格,姓名和薪水之间的间距也同样如此。当输入字段之间有两个或多个空格时,list
input
style
&
参数使用两个空格作为值结束标记,因此将读取包含单词之间单个空格的字段值。
工资
上的
参数将扫描从下一个非空到下一个空或行尾的值

filename have 'c:\temp\sample.txt';

data want;
  attrib
    level length=$10
    position length=$50
    name length=$30
    salary length=8
  ;
  infile have missover;
  input  
    level
    position&
    name&
    salary: dollar. ;
  ;
run;
可以使用
压缩
功能清除
级别
名称
值:

level = compress(level,'()');
name = compress(name,'()');

嗨,Richard,我相信这正是我要找的东西。它几乎适用于所有记录(行)。但是,它将缺少的值归因于一行中不应缺少的薪资。我认为这是由于&论点的性质。我希望有什么方法可以发布整个数据集来展示这一点。现实世界的数据很少符合预期的数据模型。错误行可能没有预期的两个空格。另一种策略是使用infle
DLM=“()”
将括号用作字段分隔符,并删除&和:参数。那么你的现实世界可能会有一些与括号不一致的行。是的,仔细看,错误的行在“名字”列中的名字和姓氏之间有两个空格。因此,为什么薪水会被遗漏,因为姓氏被解读为薪水。