首页 文章

使用proc import sas指定格式

提问于
浏览
0

我正在尝试将.txt文件中的一些数据导入WPS(使用SAS语言) . Everythings工作得很好,直到我意识到对于一个柱/变量,我的一些观察被切断了 . 例如,在列/变量Type中,我在原始文件中的第一个观察结果是:

RAN
FG
MAJOFG
ARBA
ARBV

但在我的sas数据集中,这是我得到的数据:

RAN
FG
MAJ
ARB
ARB

所以我想在导入过程中使用格式来使sas总是花8美元 . 格式 . 它可以与proc导入一起使用吗?这是我的代码:

proc import out = sasuser.frais
  datafile="~/NAS/M/XXX.txt"
  dbms=dlm replace;
  delimiter=";";
  getnames=yes;
  datarow=2;
run;

我也尝试使用数据infile但由于某种原因它移动我的数据行(第二行的开头在第一行的结尾处开始,可能是因为大多数时候我的最后4列/变量是空的) . 我有20多个变量,其中大部分是由sas正确导入的(就我的意思而言),所以如果我可以避免为每个变量命名,那就太棒了!

3 回答

  • 1

    您可以通过调整 guessingrows 参数而不是指定信息来获得可接受的结果,例如:

    data _null_;
      file "%sysfunc(pathname(work))\test.txt";
      infile cards;
      input;
      put _infile_;
      cards;
    RAN
    FG
    MAJOFG
    ARBA
    ARBV
    ;
    run;
    
    proc import out = example
      datafile="%sysfunc(pathname(work))\test.txt"
      dbms=dlm replace;
      delimiter=";";
      getnames=yes;
      datarow=2;
      guessingrows=3;
    run;
    

    如果将此值从3更改为2,则proc import仅在猜测变量 RAN 的适当长度时查看前2个数据行,并且对具有较长值的后续行发生截断 .

  • 0

    尝试使用 GUESSINGROWS 语句:

    Proc IMPORT … ;
      …
      GUESSINGROWS = 100;
    run;
    

    DATA 步骤与 INPUT 语句一起使用且某些行不完整时, INFILE 语句应指定 MISSOVER 选项 . 这将帮助您创建一个数据集,其中每行对应于数据文件的每一行 .

    INFILE … FIRSTOBS=2 DLM=';' DSD MISSOVER;
      length v1-v20 $30;
      INPUT v1-v20;
    

    在数据步骤隐式循环步骤期间,数据行末尾没有相应输入值的任何变量将被设置为缺失,并且输入语句将不会尝试在下一行中查找更多值 .

  • 0

    我的问题是我计划将此输入代码用于多个文件,并且类型的观察顺序是随机的 . 所以它知道顺序,我知道可能的不同值(最大长度为6) . 所以猜测不适合我的情况 . 但我找到了一种方法来纠正我的代码与John Doe提供的链接(https://communities.sas.com/t5/Base-SAS-Programming/Text-File-Import-force-the-correct-Informat-and-format/td-p/281701)我获取了proc导入生成的数据并修改了一个需要更改的变量 . 谢谢你们!

相关问题