【问题标题】:SAS/SQL Text File ReadingSAS/SQL 文本文件读取
【发布时间】:2018-07-31 17:21:56
【问题描述】:

我希望将“.txt”文件上传到 SAS 中,以便我可以在内容中搜索要分析的特定字符和单词。有问题的文本文件格式不正确,因此理想情况下有一列,每个单词都是一个新的观察结果,例如:

   TEXT
1  Hello
2  World

目前我正在将文件下载到 SAS 中,但有很多空格,并且每次观察有多个单词。

data mylib.textimport;
   infile "../TEXTTEST.txt" dlm="' ', ',', '.'";
   input __text__ $char300. ;
run;

谁能帮助我如何将每个新单词放入新列中?

提前致谢。 :)

【问题讨论】:

  • 这个问题和SQL有什么关系?
  • 你所说的“把词分列”是什么意思?

标签: sql database import sas


【解决方案1】:

如果您想“逐字”读取文件,那么只需告诉 SAS 您认为哪些字符是分隔符并使用 FLOWOVER 选项来读取这些单词。因此,如果您想将空格、逗号、句点、引号、制表符、换行符和回车符视为单词分隔符,您的程序可能如下所示。

data want;
  dlm=' ,."''' || '090A0D'x;
  infile "../TEXTTEST.txt" dlm=dlm flowover;
  length word $300 ;
  input word @@ ;
run;

【讨论】:

  • flowover 是默认的 infile 行为,因此无需明确指定也可以使用。
【解决方案2】:

我会 TRANSLATE 将您想要的字符输出到空格中,然后遍历剩余的字符,输出每个单词。

这是一些测试数据

data have;
format line $200.;
input ;
line = _infile_;
datalines;
This is some, test.text
How,about,this cheesey.cheese?
;
run;

这是一个 DATA 步骤,用于循环并输出您要查找的内容:

data want(keep=word);
format word $200.;
set have;
line = translate(line,"  ",",."); /*convert , and . to space*/

n = countw(line);

/*Loop through the words and output*/
do i=1 to n;
    word = scan(line,i);
    output;
end;
run;

TRANSLATE 将第三个参数中的字符转换为第二个参数中的字符。这个字符串作为一个数组。它对数组中的每个值进行这种替换。

如本例所示,您可能需要考虑其他标点符号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多