SAS 您所在的位置:网站首页 sas合并两个表 SAS

SAS

2024-07-09 12:31| 来源: 网络整理| 查看: 265

今天小编打算分享一段关于RTF合并的小程序...在平时出Tabel的过程中,很多人都是一个表一个表的出,最后要面临一个RTF合并的过程,很多公司都有自己的方式进行合并,小编虽然没见过他们的代码,但是以小编浅薄的经验来看,原理大概也是大同小异。这篇推文小编要介绍的是小编用SAS实现RTF合并的原理以及过程。

RTF合并原理

首先要问一下。你有试过用记事本打开RTF文件吗?打开会发现什么呢。

显而易见,是一堆不说人话的编码...就是这样的一堆编码,是RTF合并成功与否的关键。SAS实现RTF合并的原理就是将RTF导入到SAS数据集中,然后通过数据集的追加,以及对编码的简单的处理,接着再输出,就完成了RTF的合并。

中间需要对编码处理的也不多,只要处理到满足RTF的格式就够了。一共只需要处理3个地方。

1.除首个RTF外,其他RTF第一行的“{”要删除。

2.除最后一个RTF外,其他RTF最后一行的“}”要删除。

3.在每个俩个RTF编码间插入下面这一串编码。

\sect\sectd\linex0\endnhere\pgwsxn15840\pghsxn12240\lndscpsxn\headery1440\footery1440\marglsxn1440\margrsxn1440\margtsxn1440\margbsxn1440

嗯,上面操作做完就大功告成了!虽然今天只测试了一次,但理论上没啥问题,并且也成功了。小编日常也用不上这种合并。

今天看有人在问RTF的合并,所以临时兴起,写了一下。下面来看看小编实现过程的代码。

实现过程

1.为了测试功能,小编先生成了3个单独的RTF文件。

生成代码如下:文末会上传至百度网盘,以供下载测试用。

2.在有了需要合并的文件后就开始了。

代码语言:javascript复制*获取指定路径RTF文件名称; filename xcl_fil pipe "dir D:\日常练习\Back_temp_1\Combine\Table\TFL\*.rtf /b/s"; data add_rtflist; infile xcl_fil truncover; input fname $char1000.; rtffn=strip("filename rtffn")||strip(_N_)||right(' "')||strip(fname)||strip('" lrecl=5000;'); run; *在获取文件名称后,可以改变数据观测的顺序,以实现rtf文件合并的先后顺序(此处小编就不操作了); %macro doloop; data _null_; set add_rtflist end=last; call execute(rtffn); if last then call symput('maxn',vvalue(_N_)); run; %put &maxn.; %do i=1 %to &maxn.; /*将文件导入SAS中,变成SAS数据集*/ data have&i. ; %let _EFIERR_ = 0; infile rtffn&i. ; informat line $5000.;format line $5000.;length line $5000.;input line $ @@;run; /*实现上面说的三个处理过程: 1.除首个RTF外,其他RTF第一行的“{”要删除。 2.除最后一个RTF外,其他RTF最后一行的“}”要删除。 3.在每个俩个RTF编码间插入一行。这样一行放下面一串代码。 \sect\sectd\linex0\endnhere\pgwsxn15840\pghsxn12240\lndscpsxn\headery1440\footery1440\marglsxn1440\margrsxn1440\margtsxn1440\margbsxn1440 */ %if &i. eq 1 %then %do; data want; set have&i. end=last; if last then line="\pard"; run; %end; %if &i. ne 1 %then %do; proc sql; insert into want(line) values ('\sect\sectd\linex0\endnhere\pgwsxn15840\pghsxn12240\lndscpsxn\headery1440\footery1440\marglsxn1440\margrsxn1440\margtsxn1440\margbsxn1440'); quit; data have&i.; set have&i. end=last; if last then line="\pard"; if _n_=1 then line=substr(line,2); run; data want; set want have&i. ; run; %if &i. eq &maxn. %then %do; data want; set want end=last; if last then line="\pard}"; run; %end; %end; %end; /* 文件输出成合并完成后的RTF */ data _null_; set want; file "D:\日常练习\Back_temp_1\Combine\Table\new_file.rtf" lrecl=5000; put line; run; %mend; %doloop;

合并后结果如下:

测试过程程序可以点击下面网盘链接下载。

百度网盘链接:https://pan.baidu.com/s/1wlkpTSyhxwLKPgGoRGaiog

整个代码其实很少,一点也不多。代码可以直接复制拿去用!只需要修改几个路径就可以了!程序写的很粗糙,很多地方可以优化,小编日常也用不上,就懒得优化了



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有