Text 如何将没有列名的文本文件导入SAS格式SAS Viya?

Text 如何将没有列名的文本文件导入SAS格式SAS Viya?,text,import,sas,Text,Import,Sas,我有一个文本文件在SAS Viya的workbench中上传,没有列标题。我需要转换成SAS格式的文件,并指定自己的列名,我在word文档。我在SAS Viya中使用自动导入功能时得到了这段代码,但我不知道如何分配列名。任何帮助都会很好 proc sql; %if %sysfunc(exist(WORK.NEWDATA)) %then %do; drop table WORK.NEWDATA; %end; %if %sysfunc(exist(WORK.NEWDATA,VIEW)) %t

我有一个文本文件在SAS Viya的workbench中上传,没有列标题。我需要转换成SAS格式的文件,并指定自己的列名,我在word文档。我在SAS Viya中使用自动导入功能时得到了这段代码,但我不知道如何分配列名。任何帮助都会很好

proc sql;
%if %sysfunc(exist(WORK.NEWDATA)) %then %do;
    drop table WORK.NEWDATA;
%end;
%if %sysfunc(exist(WORK.NEWDATA,VIEW)) %then %do;
    drop view WORK.NEWDATA;
%end;
quit;



FILENAME LOC DISK '/workspace/workbench/myorg/data/home/olddatatoimport.txt';

PROC IMPORT DATAFILE=LOC
    DBMS=DLM
    OUT=WORK.NEWDATA;
    GETNAMES=YES;
RUN;

GETNAMES=NO
时,可以使用
RENAME
语句更改
PROC IMPORT
指定的默认列名

例如:

假定Word文档中的列名已复制并粘贴到SAS数据行中

仅文件名数据温度;
*创建一些样本数据;
数据为空;
仅文件数据dlm=',';
设置sashelp.class(obs=3);
姓名年龄性别身高体重;
跑
*记录样本数据,以便查看;
数据为空;
只填充数据;
输入;
把"填入";;
跑
*只导入数据数据文件,没有要获取的名称!;
*默认列名为VAR1到VAR;
proc import file=onlydata replace out=onlydata dbms=csv;
GETNAMES=NO;
跑
*假定Word文档中的列名顺序正确
*(与数据文件匹配)并复制粘贴到数据行中;
数据列名称(label=“From WORD document”);
长度名称$32;
输入名称;
数据线;
名称
年龄
性
高度
重量
跑
*为RENAME语句构造oldname=newname源代码对;
数据为空;
设置列名称结束=最后一列;
长度对$32000;
保持成对;
pairs=catx(“”,pairs,catx(“”,cats('var','n','name));
如果是最后一列,那么
调用symput('pairs',trim(pairs));
跑
*使用Proc数据集修改数据集的标题部分;
*不会重写整个数据集;
proc数据集nolist lib=工作;
仅修改数据;
重命名&配对;
跑
退出
%让syslast=onlydata;
查看的日志图像

具有默认
PROC IMPORT
列名的数据集

通过
PROC数据集应用的
RENAME
语句后的数据集


显示Word文档中的数据结构。您能用SAS阅读文档吗?Word文档是经常更改还是一次性更改?数据文件是文本文件格式,标题名在单独的Word文档中。我把word文档放在不同的位置。当我在SAS viya(我提供的代码)中使用import函数时,它只是帮助Var1 Var2等。但是我需要名称为Var1=State,Var2=cityWord文档是否也描述了变量中的内容(字符串、数字、日期、时间、日期时间)?如果是这样,请跳过强制SAS使用PROC IMPORT猜测如何定义变量的步骤,而只需编写一个数据步骤来直接读取文件。请注意,要生成CSV文件,您需要使用DSD选项,而不仅仅是更改分隔符。在您的示例中不会有任何区别,因为SASHELP.CLASS中的值不包含任何逗号。
filename onlydata temp;

* create some sample data;

data _null_;
  file onlydata dlm=',';
  set sashelp.class(obs=3);
  put name age sex height weight;
run;

* log the sample data just to get a look-see;

data _null_;
  infile onlydata;
  input;
  put _infile_;
run;

* IMPORT the data only datafile, no names to get!;
* default column names are VAR1 to VAR<n>;

proc import file=onlydata replace out=onlydata dbms=csv;
  GETNAMES=NO;
run;

* presume the column names in the Word document are in the correct order
* (matching the data file) and were copy & pasted into the datalines;

data column_names(label="From WORD document");
  length name $32;
  input name;
datalines;
name
age 
sex 
height
weight
run;

* Construct the oldname=newname source code pairs for a RENAME statement;
data _null_;
  set column_names end=last_column;

  length pairs $32000;
  retain pairs;

  pairs = catx(' ', pairs, catx('=', cats('var',_n_), name));

  if last_column then 
    call symput ('pairs', trim(pairs));
run;

* use Proc DATASET to modify the header portion of the datas set;
* will not rewrite the entire data set;

proc datasets nolist lib=work;
  modify onlydata;
  rename &pairs;
run;
quit;

%let syslast = onlydata;