【问题标题】:Using dlm and dsd correctly正确使用 dlm 和 dsd
【发布时间】:2016-09-25 04:04:50
【问题描述】:

在我的文本文件中,数据由| 分隔。所以我使用了代码

data TEST.something;
infile something dlm = '|' dsd missover firstobs=2;
  input Proc_cde : $3.
  Profession_Name : $16.
  Lic_id : $8.
  Expire_Date : mmddyy10.
  Original_Date : mmddyy10.
  Rank_Code : $2.
  License_Number : $5.
  Status_Effective_Date:  mmddyy10.
  Board_action_Indicator : $1.
  License_Status_Description : $5.

  Last_name : $20.
  First_Name : $14.
  License_Active_Description : $8.
  e_mail $30.
  ;

但在我的文本文件中,我缺少诸如 ETIEXXX|MILTHYYY||||ACTIVE|23 之类的值

当我打印出数据时,有些我想要的值没有显示,但有些是正确的。它还在某个地方显示||。数据被转移了。

那么有什么问题呢?

编辑

示例数据(仅列出几行)。

pro_cde|Profession-Name|lic_id|Expire-Date|Original-Date|Rank-Code|License-Number|Status-Effective-Date|Board-Action-Indicator|License-Status-Description|Last-Name|First-Name|Middle-Name|Name-Suffix|Business-Name|License-Active-Status-Description|County|County-Description|Mailing-Address-Line1|Mailing-Address-line2|Mailing-Address-City|Mailing-Address-State|Mailing-Address-ZIPcode|Mailing-Address-Area-Code|Mailing-Address-Phone-Number|Mailing-Address-Phone-Extension|Practice-Location-Address-Line1|Practice-Location-Address-line2|Practice-Location-Address-City|Practice-Location-Address-State|Practice-Location-Address-ZIPcode|Email|Mod-Cdes|Prescribe-Ind|Dispensing-Ind|
 732|Dental Hygienist|@2783168|03/28/2016|08/01/2005|SC|16042|08/01/2002|N|CLEAR|ETIEXXX|MILTHYYY||||ACTIVE|23|UIARI-DADE| P.O BOX 692343||MIAMI|FL|34568|815|738-4640||13830 S.W 6TH AVE||UIARI|NY|34568|emi3th4ne@yahoo.com||||
 732|Dental Hygienist|690|03/28/2016||CA|1143|04/20/2013|N|CLEAR|WTGD|CUIOLYN|J|||ACTIVE|56|OKALOOSA|5702 OLD BETHEL RD||CRESTVIEW|FL|32536|850|862-0924||90 RATETRACK ROAD||FORT WCLTON BEACH|VA|32547|||||
 732|Dental Hygienist|9728|03/28/2016|08/27/1998|SD|11119|03/15/2012|N|CLEAR|RTED|RIHGARD|B|||ACTIVE|39|HILLSBOROUGH|249 APACHE TRAIL||BRANDON|ND|34568|313|659-7798||249 APDDHE TRAIL||BRANDON|FL|34568|||||

【问题讨论】:

  • 那里的内容没有问题,因此您必须展示一些实际失败的示例数据(并且对您的输入语句有意义 - 您的示例没有)。
  • 您可能使用冒号和格式不正确,但正如乔指出的那样,如果没有数据,我们无法对此发表评论。需要 DSD 将连续分隔符解释为缺失值。
  • @Joe ,样本数据在那里。

标签: sas dlm


【解决方案1】:

INPUT 语句中的变量列表与数据第一行中的变量列表不匹配。你跳过了很多列。

如果需要,您可以通过在 INPUT 语句中添加一些虚拟变量来跳过列。您必须在 INPUT 语句中指定的任何信息前面添加 : 修饰符,以防止 SAS 读取超出分隔符。

length dummy $1 ;
drop dummy ;
input
  Proc_cde : $3.
  ...
  First_Name : $14.
  3*dummy
  License_Active_Description : $8.
  15*dummy
  e_mail :$30.
;

【讨论】:

  • 我只想打印选定的列。我需要将所有变量都放在 INPUT 语句中吗?
  • 打印或采取手段或运行回归与告诉 SAS 如何将文本文件读入数据集无关。如果您只想打印一些变量,请在 PROC PRINT 步骤中使用 VAR 语句。
  • 那么你建议使用DSDdlm吗?
  • 是的。您需要使用 DLM 告诉 SAS 数据以 | 分隔。您需要使用 DSD 告诉 SAS 相邻的 ||表示一个值为空。
  • 我的代码:input Proc_cde : $3. Profession_Name : $16. Lic_id : $8. Expire_Date : mmddyy10. Original_Date : mmddyy10. Rank_Code : $2. License_Number : $5. Status_Effective_Date: mmddyy10. Board_action_Indicator : $1. License_Status_Description : $5. Last_name : $20. First_Name : $14. 3*dummy License_Active_Description : $8. 15*dummy e_mail $40. 3*dummy ;。我检查了设定的日期。它列出了从 Proc_code 到 e_mail。email 列是错误的。为空或包括下一列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 2018-01-26
  • 2021-12-24
  • 2013-05-10
相关资源
最近更新 更多