Sas 使用主程序编辑目录中的所有程序标题?

Sas 使用主程序编辑目录中的所有程序标题?,sas,Sas,在办公室的日常编程中,我经常遇到以下问题:文件可以从一个项目重复使用到下一个项目,但每个文件的标题信息都需要更新,当您处理数百个文件时,手动更新这些文件是一件痛苦的事,也是一种资源浪费 理想情况下,我想要的是一个程序,它包含一个标准头,带有作者、项目代码、创建日期等属性,我可以手动更新,执行时,它会将此信息添加到目录中的所有文件/程序中。我们使用一个标准头,它覆盖每个程序的前20行,每个属性位于某一行,或者可以搜索以替换它 在大多数情况下,我想自己开发这个,但任何关于如何将所述头应用于每个程序的

在办公室的日常编程中,我经常遇到以下问题:文件可以从一个项目重复使用到下一个项目,但每个文件的标题信息都需要更新,当您处理数百个文件时,手动更新这些文件是一件痛苦的事,也是一种资源浪费

理想情况下,我想要的是一个程序,它包含一个标准头,带有作者、项目代码、创建日期等属性,我可以手动更新,执行时,它会将此信息添加到目录中的所有文件/程序中。我们使用一个标准头,它覆盖每个程序的前20行,每个属性位于某一行,或者可以搜索以替换它


在大多数情况下,我想自己开发这个,但任何关于如何将所述头应用于每个程序的前20行以及如何将其应用于目录中的每个文件的起点。我想在以后添加其他功能以用于跟踪等目的,但现在任何入门帮助都将非常棒。

我不会以这种方式修改目录中的程序,而是使用
%include
文件。我们以前在项目中也这样做过,您有一个包含libnames之类的程序,然后您就有了

%include('header.sas');
或者你在这个项目中写的每一个程序中的任何东西。像这样以编程方式修改代码是一个坏主意,因为您可能没有最新版本的头文件,而且如果您做得不正确,可能会损坏程序)。将它作为一个包含很容易,避免了重复相同的代码20次(有可能出错),并保证了最新的代码

在您的情况下,您可以为新的一天修改“头”文件,并且假设您已经正确地设置了内容(听起来像是这样),那么100或任何其他程序都可以保持不变,不变,只包括更新的头(自动)。这还有一个额外的优点,即您不需要对程序进行很多微小的更改,这意味着您知道什么时候会对程序进行有意义的更新(而不仅仅是每天运行一次)

总的来说,由于这些原因,这种模块化方法具有优越性——将程序/流程的“单独运行”部分与主要部分分离,而且,如果您将其设置为模块已经准备好,并且只需要在同一目录中有一个头文件就可以自动运行,那么它也可以更容易地为其他目的重用程序。(您可以获取当前程序的名称及其路径;如果需要,请使用批处理或交互模式以及所使用的操作系统进行注释)


这也是企业指南模式更好的地方之一;在这里,您将所有与项目相关的文件都放在一个项目文件(.egp)中,因此您甚至不必这样做-项目本身可以有一个autoexec进程流(首先运行,以设置libnames等),并且可以有notes/author/等。

我非常喜欢使用键盘宏生成头壳。因此,当我点击CTRL-H时,我会得到一个标题栏注释,其中包含您描述的信息,包括我的姓名和今天的日期。如果假设您必须为每个项目的每个程序手动在标题中键入某些内容(例如修订说明或其他内容),那么自动添加100个标题外壳不会比键盘宏方法节省太多

也就是说,是的,您可以通过SAS使用file语句或其他方式来实现。可能用任何好的文本编辑器都能做到


当然,更好的解决方案是使用版本控制系统。

这应该是可行的。如果一行以“Author:”开头,它将替换为“Author:ME,ONLY ME!!!”。 如果您在Windows上,请将所有正向斜杠(“/”)更改为反向斜杠(\”)


我把这个问题理解为一个标准注释块来记录每个程序,而不是要执行的标准代码。我认为%include对后面的程序很有效,不确定它在这种情况下会有多大帮助,假设他希望每个程序都有一个单独的注释块,列出修订历史等。不幸的是,在我工作的环境中,我们无法使用模块化方法,我们只使用基本SAS。对于我的环境,最好的解决方案是*.bat文件的行,我可以在项目启动时运行一次,将指定的字段author/date/shandor/protocol/directory path应用于文件夹中的每个程序。这样,它将只编辑一次所有文件,然后允许我为新项目对每个程序进行更新。那么,我将重新考虑您的编程环境。以这种方式编程是一种非常缓慢且容易出错的方式。感谢您的快速回复和良好的提示。不幸的是,使用包含功能不是一个选项,因为每个程序都需要是一个独立的程序,并且标头不是一般标头,而是特定于程序的,因此,我只想更改作者/日期、目录路径和赞助商。协议,以及我可以从单独的excel电子表格中提取的程序描述,我们使用该电子表格进行跟踪。昆汀在下面所做的假设“如果假设您必须为每个项目的每个程序手动键入标题”,这就是我必须要做的。如果可能的话,您可以发布这样一个键盘宏吗?我知道这不是一个理想的解决方案,因为我仍然需要打开每个程序并应用更改,但这是一个开始,但如果你在lexjansen.com上搜索键盘宏或缩写,应该会得到很多点击,包括+1的“获取版本控制系统”。键盘宏似乎也是一个合理的选择。如果你
%let infolder=/folder/where/sas/programs/are;
%let outfolder=/folder/where/new/sas/programs/are/going;
filename dummy temp;
data _null_;
  attrib currentinfile currentoutfile length=$32000;
  infile "&infolder/*.sas" filename=currentinfile lrecl=32000;
  input;
  currentoutfile="&outfolder./"!!scan(currentinfile,-1,"/");
  file dummy filevar=currentoutfile lrecl=32000;
  if index(_infile_,"Author:")=1 then put "Author: ME, ONLY ME!!!";
  else put _infile_;
run;