无法读取交错的自由格式数据

时间:2016-12-03 23:15:36

标签: sas

我需要在使用一些指针位置时阅读此内容,并稍后修剪括号。暂时,我在逻辑树上遇到麻烦,告诉程序移动到不同的级别并相应地应用输入。

这是数据文件的一小部分示例:

级别1-6分别从位置1,10,19,28,37和46开始。 enter link description here 这是我的代码:

<form id="f1" name="f1" action="javascript:void()" onsubmit="if(this.t1.value!=null && this.t1.value!='') parent.findString(this.t1.value);return false;">
    <input type="text" id="t1" name="t1" value="text" size="20">
    <input type="submit" name="b1" value="Find" onclick="if(this.t1.value!=null && this.t1.value!='') parent.findString(this.t1.value);return false;">
</form>

enter image description here当我运行上面的代码时会发生这种情况。

1 个答案:

答案 0 :(得分:3)

如果删除INFILE语句中的DSD选项并从第一个INPUT中删除格式并添加一个尾随@来保存条件生成的INPUT的行,则代码可能会有效。 Employee_Name值将包含(),但您可以稍后删除它们。

infile Pegasus truncover ;
length Level $8 Job_Title $23 Employee_Name $20 Salary 8;
input Level @;

但是您不需要带有硬编码列位置的有条件生成的INPUT语句。你应该忽略缩进。读入字符串并根据()的位置解析值。

如果您告诉SAS除了空格字符的正常默认分隔符之外还要将&视为其他分隔符,那么这些数据看起来足够干净,您可以直接使用()修饰符读取字段。< / p>

data want;
  infile cards dlm=' ()' truncover;
  length Level $8 Job_Title $23 Employee_Name $20 Salary 8 ;
  informat salary comma. ;
  format salary dollar12. ;
  input ( Level -- Salary) (&) ;
cards;                                                                                                                                  
(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                     
;     

以下是前几个值的样子: enter image description here

如果不起作用,请将其读入变量并使用SCAN()进行解析。

  input string $107. salary;
  level = scan(string,1,'()');
  job_title = left(scan(string,2,'()'));
  employee_name = left(scan(string,3,'()'));