Macros 如何创建热键来检查变量名是否有效

Macros 如何创建热键来检查变量名是否有效,macros,sas,Macros,Sas,如前所述 “您应该使用与命名变量相同的谨慎来命名变量 第一个孩子。” SAS的32个字符限制有时会使这变得困难。如果知道一个给定的名称是否有效,那就太好了。幸运的是,SAS为此提供了一个函数: 有了它,我们可以构造一个脚本,告诉我们自己的名字是否有效(NVALID似乎不能直接在%PUT语句中工作) 这可以变成一个宏 %macro CheckValidity(name_to_check); data _null_; isValid = nvalid("&name_to_chec

如前所述

“您应该使用与命名变量相同的谨慎来命名变量 第一个孩子。”

SAS的32个字符限制有时会使这变得困难。如果知道一个给定的名称是否有效,那就太好了。幸运的是,SAS为此提供了一个函数:

有了它,我们可以构造一个脚本,告诉我们自己的名字是否有效(NVALID似乎不能直接在
%PUT
语句中工作)

这可以变成一个宏

%macro CheckValidity(name_to_check);
  data _null_;
    isValid = nvalid("&name_to_check", 'v7');
    if isValid then put "WARNI%str(NG-) Valid name: &name_to_check";
    else put "ERR%str(OR-) Invalid name: &name_to_check";
  run;
%mend;

%CheckValidity(IsThisAValidName?);
此外,我们还可以在
键中选择
菜单

提交“%CheckValidity();”

当然,这种特殊的绑定几乎毫无价值。也就是说,除非我们有办法向函数提供输入

为此,我想到了两种可能性:

  • 将选定文本绑定到宏变量。然后可以通过
    submit”%CheckValidity(&selected_text);“
  • 以某种方式使用
    粘贴
    关键字 这两种方法我都不走运

    在案例1中,不清楚如何使增强的编辑器具有自我意识。也就是说,我不知道如何将所选文本绑定到宏变量

    在案例2中,
    paste
    关键字是如何工作的还不清楚,因为实际上没有关于它的任何文档。无论何时我使用它,我都会

    错误:必须粘贴到输入字段。

    我的问题是:

  • 有没有办法将所选文本绑定到宏变量
  • 是否可以使用
    paste
    命令将所选文本粘贴到
  • 有没有其他方法可以完成同样的任务

  • 当然,同样的任务也可以用AutoHotKey之类的工具轻松完成。但是,仅使用SAS就可以完成吗?

    ?有效变量名的SAS规则非常简单。必须以uu或字母开头,并且只包含uu、字母或数字。您希望它如何工作?突出显示文本,点击FXX键,它会检查吗?会发生什么。老实说,这些规则非常简单,编辑器的底部(base)有一个列指示符,计算起点和终点是否为32个字符并不困难。就投资功能开发而言,这将是非常低的。你可以把它作为一个想法加入到列表中。是的。选择文本,当按下FXX键时,将所选文本传递到
    %CheckValidity()
    宏中。我知道这个要求似乎不寻常。不管怎样,通过我建议的方法或其他方法,这样的自动化是可能的吗?
    %macro CheckValidity(name_to_check);
      data _null_;
        isValid = nvalid("&name_to_check", 'v7');
        if isValid then put "WARNI%str(NG-) Valid name: &name_to_check";
        else put "ERR%str(OR-) Invalid name: &name_to_check";
      run;
    %mend;
    
    %CheckValidity(IsThisAValidName?);