如何在 sas 或 R 中为国家死亡指数创建标准文本文件格式

Moh*_*uma 1 r sas

我想创建一个标准文本文件格式,每个患者有 100 个位置,如所附屏幕截图(忽略前 2 行),以获取国家死亡指数要求的死亡日期。我尝试了这一点sas,然后将其导出为.txt,但我注意到在记事本中打开该列时,列宽未正确对齐。他们不想保留标题,但我们需要保留规定的宽度。

在此输入图像描述 在此输入图像描述

这是我的示例虚构数据集(我在 Excel 中)和我使用的代码

Abei    Ghador          07  16  1992                                            
Aziz    Patrick         07  01  1947                                            
Ali Theodore            07  01  1966                                            
Abdelrahman Baker   A       05  01  1966                                            
Abd Farik           11  01  1971                                            
Abele   Mat A       04  01  1994


Run Code Online (Sandbox Code Playgroud)

以下是我的一些努力,sas因为我不断将每一列合并到组合数据中,但最终的 .txt 不符合他们的要求。

data combinedAoDB;  merge LastName1 FirstName2 ;run;
data combinedAoDB;  merge combinedAoDB MIDDLEINITIAL3 SSN4 MONTHBIRTH5 DAYBIRTH6 YEARBIRTH5;run;
data combinedAoDB;  merge combinedAoDB FATHERSURNAME8 AGEUNITdeath9 NUMBERAGEUNITSdth_10 SEX_11 RACE_12 MARITALSTATUS_13 STATEOFRESIDENCE_14;run;
data combinedAoDB;  merge combinedAoDB STATEOFBIRTH_15 CONTROLIDNUMBER_16 OPTIONALUSERDATA_17 BLANKFIELD_18;run;


proc contents data=combinedAoDB;run;

proc export data=work.combinedAoDB outfile='new 3 combinedAoDB.txt' 
replace; putnames=no; run;
Run Code Online (Sandbox Code Playgroud)

任何有关如何解决此问题的建议将sas不胜R感激。

Tom*_*Tom 6

您无法“导出”到固定长度的文件。你不需要这样做。您只需直接写入固定长度文件即可。

 data _null_;
    set work.combinedAoDB;
    file 'new 3 combinedAoDB.txt' lrecl=100 pad;
    put @1  lastname $20.
        @21 firstname $15.
        @36 middleinitial $1.
        ...
        @46 month Z2. day Z2. year Z4.
        ...
    ;
run;
Run Code Online (Sandbox Code Playgroud)

如果您将第一张图片中的文本作为实际文本(或已经作为数据集),那么您可以使用它来生成 PUT 语句。但对于 17 个变量,您可以自己输入。

让我们尝试一些示例数据:

data have;
  infile cards dsd dlm='|' truncover;
  input lastname :$20. firstname :$25. middleinitial :$1. month day year;
cards4;
Abei|Ghador||07|16|1992                                            
Aziz|Patrick||07|01|1947                                            
Abele|Mat|A|04|01|1994
;;;;

filename fda temp;

data _null_;
  set have;
  file fda lrecl=100 pad;
  put @1  lastname $20.
      @21 firstname $15.
      @36 middleinitial $1.
      @46 month Z2. day Z2. year Z4.
  ;
run;

data _null_;
  infile fda ;
  input;
  list;
run;
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述

RULE:     ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0
1         Abei                Ghador                   07161992                                                100
2         Aziz                Patrick                  07011947                                                100
3         Abele               Mat            A         04011994                                                100
Run Code Online (Sandbox Code Playgroud)