我需要在使用一些指针位置时阅读此内容,并稍后修剪括号。暂时,我在逻辑树上遇到麻烦,告诉程序移动到不同的级别并相应地应用输入。
这是数据文件的一小部分示例:
级别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>
答案 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
;
如果不起作用,请将其读入变量并使用SCAN()
进行解析。
input string $107. salary;
level = scan(string,1,'()');
job_title = left(scan(string,2,'()'));
employee_name = left(scan(string,3,'()'));