gpt4 book ai didi

sas - 将数据读入 SAS,列未对齐

转载 作者:行者123 更新时间:2023-12-04 21:12:08 25 4
gpt4 key购买 nike

我有一个看起来像这样的数据文件:

001 Mayo Clinic  120 78 7 15 
Patient has had a persistent cough for 3 weeks
023 Mayo Clinic 157 72 10 2
Patient complained of ear ache
064 HMC 201 59 . .
Patient left against medical advice
003 HMC 166 58 8 15
Patient placed on beta-blockers on 7/1/2006

我发现将其读入 SAS 的任务基本上是不可能的。不,在这种情况下,重新格式化数据文件是不可能的。因此,让我解释一下您在这里看到的内容:

每个主题有两行数据。第一行是——

科目编号/诊所/wt/hr/dx/sx
(不要担心数字的含义,那是无关紧要的)。

第二行是文本,它基本上是一个包含额外信息的注释,涉及其数据在前一行中列出的主题。所以,这些行:
001 Mayo Clinic  120 78 7 15 
Patient has had a persistent cough for 3 weeks

用于单个主题。主题 001。这些需要成为 SAS 数据集中的一行。我完全不知所措;由于诊所名称的长度不同,并且数字列未对齐,我无法弄清楚如何让 SAS 读取此内容。这是我能得到的最接近的:
data ClinData;
infile "&wdir.clinic_data.txt";
retain patno clinic weight hr dx sx exinfo;
input patno clinic $1. @;
if clinic='M' then
input patno @5 clinic $11. weight hr dx sx / @1 exinfo $30.;
else if clinic='H' then
input patno @5 clinic $3. weight hr dx sx / @1 exinfo $30.;
run;

这打印为:

http://i61.tinypic.com/2uswl90.png

所有的数值都在正确的位置。

然而,这有几个问题。

首先,主题编号 ('patno') 始终显示为缺失值。为什么?

其次,诊所仅由其首字母“M”或“H”表示。我无法让 SAS 根据它是哪个诊所来更改诊所变量的长度。

第三,变量“exinfo”包含关于患者的注释。但是,我无法让 SAS 包含整行。在格式失控之前,我能得到的最高值大约是 30 个字符。

有什么帮助吗?对于这种类型的输入,SAS 文档非常糟糕。没有一个示例真正符合我的需要,也没有充分解释如何使用某些选项。我知道我需要使用列/行指针;但问题是各行的列不一致。所以无论我使用哪种指针格式,仍然会有不正确的行。

最佳答案

SAS 中没有什么是不可能的。查看您的样本数据,我注意到您的诊所名称后面有两个空格,并且您的患者编号始终是三个字符。如果这总是正确的,您可以利用它来发挥您的优势:

data want;
length patno $3 clinic $20 weight hr dx sx 8 exinfo $80;
input;
patno = scan(_infile_,1,' ');
clinic = substr(_infile_,5,index(_infile_,' ')-5);
weight = input(scan(_infile_,-4,' '),8.);
hr = input(scan(_infile_,-3,' '),8.);
dx = input(scan(_infile_,-2,' '),8.);
sx = input(scan(_infile_,-1,' '),8.);
input exinfo $80.;

datalines;
001 Mayo Clinic 120 78 7 15
Patient has had a persistent cough for 3 weeks
023 Mayo Clinic 157 72 10 2
Patient complained of ear ache
064 HMC 201 59 . .
Patient left against medical advice
003 HMC 166 58 8 15
Patient placed on beta-blockers on 7/1/2006
run;

基本上这是解析自动变量 _INFILE_ 读取每个变量。 “难”的部分是如何阅读诊所名称(因为它包含嵌入的空格)。如果诊所并不总是有那个双空白,您仍然可以通过 substr 的其他操作来做到这一点。 , index ,和/或 scan职能。如果是这样的话,我会把它留给你。

此外,在创建新数据集时,始终使用长度语句定义变量以确保它们具有正确的长度,尤其是对于字符变量。

关于sas - 将数据读入 SAS,列未对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22185875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com