精华内容
下载资源
问答
  • SAS创建宏变量的七种方法

    千次阅读 2019-09-13 09:34:21
    学会创建宏变量,特别是全局宏变量是应用宏的一个基础,下面我们介绍一下,创建宏变量的七种方法,并通过例子来演示。 1.通过宏函数创建宏变量。 %let dsid=%sysfunc(open(sashelp.class)); %let nvars=%...

    学会创建宏变量,特别是全局宏变量是应用宏的一个基础,下面我们介绍一下,创建宏变量的七种方法,并通过例子来演示。

    1.通过宏函数创建宏变量。

    %let dsid=%sysfunc(open(sashelp.class));
    %let nvars=%sysfunc(attrn(&dsid,nvars));
    %let dsid=%sysfunc(attrn(&dsid,nobs));
    %let dsid=%sysfunc(close(&dsid));
    %put &nvars.;
    %put &nobs.;



    程序解读:上边演示了如何使用统配宏函数和其他的SAS函数结合产生需要的结果。

    2.通过SQL过程用变量值创建一个宏变量。

    proc sql noprint;
       select distinct sex
       into :list_a separated by ' '
       from sashelp.class;
    quit;
    %put &list_a.;



    程序解读:程序把变量sex的所有值distinct之后赋值给一个宏变量list_a。另外,上面的程序又用到了创建宏变量的一个关键字SEPARATED BY,该关键字可以对同一个宏变量用BY后面的单引号(或双引号)里面的符号隔开,如空格符号,逗号等。

    3.通过SQL过程创建多个宏变量

    proc sql noprint;
       select nvar,nobs
       into :nvar, :nobs
       from dictionary.tables
       where libname = 'SASHELP' and memname = 'CLASS';
    /*注意:此处的SASHELP和CLASS必须要大写*/
    quit;
    %put &nvar.;
    %put &nobs.;



    程序解读:通过SQL过程获取宏变量是最常用的方法之一。上面程序讲解的是如何从数据字典里面获取逻辑库Sashelp的数据集CLASS。另外,由于这里需要创建两个宏变量,所以宏变量nvar和nobs之间用逗号隔开。

    4.通过CONTENTS和SQL过程用变量名创建宏变量。

    proc contents data=sashelp.class out=con_class;
    run;
    proc sql noprint;
       select name,put(count(name),5.-l)
       into :clist separated by ' ', :charct
       from con_class
       where type=2;;
    quit;
    %put &clist.;
    %put &charct.;



    程序解读:CONTENTS过程可以产生一个数据集的头文件,包含了多种该数据集的信息,查看输出数据集con_class内容,其中type=2表示字符型变量。

    5.通过SQL过程用变量名创建宏变量列表。

    proc sql noprint;
       selecct name
       into :clist1-:clist999
       from dictionary.columns
       where libname = 'SASHELP' and memname = 'CLASS';
    quit;
    %put &clist1.;
    %put &clist2.;



    程序解读:这段程序不同于上面的的4程序,这段程序是把所有的name值一一对应地赋值给不同的宏变量,宏变量列表可以用“-:”隔开。

    6.通过SQL过程用变量值创建宏变量列表

    proc sql noprint;
       select count(distinct sex)
       into :n
       from sashelp.class;
       select distinct sex
       into :type1 - :type%left(&n)
       from sashelp.class;
    quit;
    %put &n.;
    %put &type1.;



    程序解读:该程序首先创建一个用于计算变量值经过distinct之后的数值宏变量n,然后作为第二个宏变量列表的列表数的引用宏变量。

    7.通过DATA步接口子程序CALL SYMPUTX。

    data _null_;
       set sashelp.class nobs=obs;
       call symputx('m1',obs);
       call symput('m2',obs);
       Stop;
    run;
    %put &m1.;
    %put &m2.;



    程序解读:DATA步可以通过接口程序SYMPUTX和SYMPUT来创建全局宏变量。但是SYMPUTX和SYMPUT之间有一定的区别:SYMPUTX能消除后面参数的左右空格,而SYMPUT只能消除右空格,可以测试一下两者的区别,请看下边的代码:

    data test&m1.;
       x=1;
    run;
    
    data test&m2.;
       x=1;
    run;



    程序解读:程序运行结果test&m2.会报错,查看日志会发现在&m2.解析后左边有很多空格,造成本来希望test1作为数据集的名字,但实际上没有达到效果。而test&m1.可以满足需求。














    转载于:https://my.oschina.net/dataRunner/blog/626262

    展开全文
  • 1、在./mediatek/config/gxq15_ics/ProjectConfig.mk中添加 变量 PALADIN_UI_YITI = no 另外, 也需要在AUTO_ADD_GLOBAL_DEFINE_BY_NAME = 中添加。 2、mediatek\build\tools\javaoption.pm中添加PALADIN_UI_YITI ...
  • StepFlow, StepFlow是创建要执行的步骤流的方法 [[Swift 3.0 ] ( https://img.shields.io/badge/Swift-3.0-orange.svg?style=flat)](https://developer.apple.com/swift/ )
  • 然后在build Settings ——>Prefix Header 添加此文件的路径$(SRCROOT)/EasyToLearn/Common/PrefixHeader.pch这样在每一个文件中都可以进行使用。
    然后在build Settings ——>Prefix Header  添加此文件的路径$(SRCROOT)/EasyToLearn/Common/PrefixHeader.pch这样在每一个文件中都可以进行使用。
    
    展开全文
  • Freasy-Monad:使用具有一流Intellij支持的Scala轻松创建Free Monad的简便方法
  • PAGE PAGE # / 2 指定G代码调用程序方法 将常用的程序固定以G代码调用的操作步骤如下 1了解G代码调用程序号与参数号 根据下表可知能被 G代码调用的程序号为 09010~09019,其参数号为 6050~605Q可创建09012程序号...
  • typedef介绍

    万次阅读 多人点赞 2019-08-21 17:18:48
    2 作用及用法 2.1 typedef的用法 使用 typedef 定义新类型的方法(步骤):在传统的变量声明表达式里,用(新的)类型名替换变量名,然后把关键字 typedef 加在该语句的开头就可以了。 下面以两个示例,描述 ...

    [20210330更新]:这篇博客写的时间有点久了:)。本次更新修改了博客内容中的错误和表述不当的地方。


    本文介绍C语言中的关键字 typedef 的用法。

    1 概述

    typedef 为C语言的关键字,作用是为一种数据类型定义一个新名字,这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。

    typedef 本身是一种存储类的关键字,与 auto、extern、static、register 等关键字不能出现在同一个表达式中。

    2 作用及用法

    2.1 typedef的用法

    使用 typedef 定义新类型的方法(步骤):在传统的变量声明表达式里,用(新的)类型名替换变量名,然后把关键字 typedef 加在该语句的开头就可以了。

    下面以两个示例,描述 typedef 的用法步骤。

    示例1:

    【第一步】:int a; ———— 传统变量声明表达式
    【第二步】:int myint_t; ———— 使用新的类型名myint_t替换变量名a
    【第三步】:typedef int myint_t; ———— 在语句开头加上typedef关键字,myint_t就是我们定义的新类型

    示例2:

    【第一步】:void (*pfunA)(int a); ———— 传统变量(函数)声明表达式
    【第二步】:void (*PFUNA)(int a); ———— 使用新的类型名PFUNA替换变量名pfunA
    【第三步】:typedef void (*PFUNA)(int a); ———— 在语句开头加上typedef关键字,PFUNA就是我们定义的新类型

    特别强调:上述两个示例,仅仅为了演示 typedef 的用法步骤,便于新手记忆 typedef 的用法。在实际编写代码时,只有“第三步”对应的语句会写入代码中!

    2.2 typedef的作用

    typedef 的作用有以下几点:

    1)typedef 的一个重要用途是定义机器无关的类型。例如,定义一个叫“REAL”的浮点类型,该浮点类型在目标机器上可以获得最高的精度:

    typedef long double REAL;

    如果在不支持 long double 的机器上运行相关代码,只需要修改对应的 typedef 语句,例如:

    typedef double REAL;

    或者:

    typedef float REAL;

    2)使用 typedef 为现有类型创建别名,给变量定义一个易于记忆且意义明确的新名字。例如:

    typedef unsigned int UINT

    3)使用 typedef 简化一些比较复杂的类型声明,例如:

    typedef void (*PFunCallBack)(char* pMsg, unsigned int nMsgLen);

    上述声明引入了 PFunCallBack 类型作为函数指针的同义字,该函数有两个类型分别为 char* 和 unsigned int 参数,以及一个类型为 void 的返回值。通常,当某个函数的参数是一个回调函数时,可能会用到 typedef 简化声明。

    例如,承接上面的示例,我们再列举下列示例:

    RedisSubCommand(const string& strKey, PFunCallBack pFunCallback, bool bOnlyOne);

    注意:类型名 PFunCallBack 与变量名 pFunCallback 的大小写区别。

    RedisSubCommand 函数的参数是一个 PFunCallBack 类型的回调函数,返回某个函数(pFunCallback)的地址。在这个示例中,如果不用 typedef,RedisSubCommand函数声明如下:

    RedisSubCommand(const string& strKey, void (*pFunCallback)(char* pMsg, unsigned int nMsgLen), bool bOnlyOne); 

    从上面两条函数声明可以看出,不使用 typedef 的情况下,RedisSubCommand 函数的声明复杂得多,不利于代码的理解,并且增加的出错风险。

    所以,在某些复杂的类型声明中,使用 typedef 进行声明的简化是很有必要的。

    3 typedef与#define

    两者的区别如下:

    • #define 进行简单的进行字符串替换。 #define 宏定义可以使用 #ifdef、#ifndef 等来进行逻辑判断,还可以使用 #undef 来取消定义。
    • typedef 是为一个类型起新名字。typedef 符合(C语言)范围规则,使用 typedef 定义的变量类型,其作用范围限制在所定义的函数或者文件内(取决于此变量定义的位置),而宏定义则没有这种特性。

    通常,使用 typedef 要比使用 #define 要好,特别是在有指针的场合里。

    下面列举几个示例。

    3.1 示例1

    代码如下:

    typedef char* pStr1;
    #define pStr2 char* 
    pStr1 s1, s2;
    pStr2 s3, s4;

    在上述的变量定义中,s1、s2、s3都被定义为 char* 类型;但是s4则定义成了 char 类型,而不是我们所预期的指针变量 char*,这是因为 #define 只做简单的字符串替换,替换后的相关代码等同于为:

    char* s3, s4;

    而使用 typedef 为 char* 定义了新类型 pStr1 后,相关代码等同于为:

    char *s3, *s4;

    3.1 示例2

    代码如下:

    typedef char *pStr;
    char string[5]="test";
    const char *p1=string;
    const pStr p2=string;
    p1++;
    p2++;

    在编译过程中,报错如下:

    根据上述错误信息能够看出,p2 为只读常量,所以 p2++ 出错了。这个问题再一次提醒我们:typedef 和 #define 不同,typedef 不是简单的文本替换,上述代码中 const pStr p2 并不等于 const char * p2,pStr 是作为一个类型存在的,所以 const pStr p2 实际上是限制了 pStr 类型的 p2 变量,对 p2 常量进行了只读限制。也就是说,const pStr p2 和 pStr const p2 本质上没有区别(可类比 const int p2 和 int const p2),都是对变量 p2 进行只读限制,只不过此处变量 p2 的数据类型是我们自己定义的 pStr,而不是系统固有类型(如 int)而已。

    所以,const pStr p2 的含义是:限定数据类型为 char * 的变量 p2 为只读,因此 p2++ 错误。

    注意:在本示例中,typedef 定义的新类型与编译系统固有的类型没有差别。

     

    展开全文
  • SAS定义变量三种方法

    千次阅读 2015-09-18 15:46:11
    原文地址:SAS定义变量三种方法作者:数据海洋SAS 中定义变量方法主要有以下三种:   一、%LET定义   这是最常用的方法。语法过程为:%let 变量名=值;调用变量:&变量名   Tips:   1、以逗号作为变量...
    SAS 中定义宏变量方法主要有以下三种:
       一、%LET定义
           这是最常用的方法。语法过程为:%let 宏变量名=值;调用宏变量:&宏变量名
           Tips:

           1、以逗号作为宏变量定义的结束。

           2、在定义时候不要加引号,系统会把引号当作宏变量的值之一。

           3、宏变量的作用域分为全局与局部。

               一种在程序(这里一般是指一个宏程序)外定义,则在整个SAS任何地方都可以被调用。

               另外一种则是在程序内部,则作用在该程序出现宏变量后面,在程序外则不可以被调用,否则

               会出错。(如果一个程序内部定义有宏变量变成全局变量,则需要使用%global)

           4、当宏变量一个表达式,使用:%str()

                        %let print=%str(proc print; run;);

           5、如果宏变量是数值计算表达式,则需要根据数值类型使用二个不同的宏变量:

                              %eval_r()   用于计算整数例如:%eval_r(1+2)

                             %sysevalf() 用于计算浮点数或者空值例如: %eval_r(1.0+2.3)

         二、data步中定义 call symput()
             这个方法只允许在data步中,这个一定需要注意
             语法过程:call symput("宏变量名",值);
                   在DATA过程中,宏变量可以包括常值、变量值。或者函数赋予宏变量。
             三、 SQL过程中定义
                  在使用SQL过程中定义宏变量,语法过程为:
                 SELECT 宏值
                  INTO :宏变量名
                  SEPARATED BY ‘分隔符号’
                使用一个案例过程说明,以后我们再详细介绍其中的一个技巧:

    data test;
    input var @@;
    datalines;
    1 2 3 4 5
    ;
    run;
    proc sql noprint ;
    select var into :macro_var
    separated by ' '
    from test;
    quit;

    展开全文
  • vs2019安装及简单处理(详细的很)

    万次阅读 多人点赞 2020-03-04 11:55:13
    将这个字符集修改为多字节字符集 当然在写一些c++或c的文件是或出现不安全函数的报错,比如scanf()建议改成scanf_s() 你可以加一个定义取消一些安装警报处理操作(该方法当然不是很完善的) 鉴于要实现:取消一些...
  • FANUC机器人支持记录150个宏指令,可以将现有的程序记录为宏指令,也可以单独创建宏程序,然后再将其记录为宏指令。 使用宏指令时可以按如下步骤进行: 1.创建一个程序作为宏程序,并对程序进行示教编程。 2.将所...
  • 创建的目的是为了解决将办公设备出租给其他方时所赚取的利息。 该电子表格使用设备的总成本,租用的周期数以及双方商定的月租数字。 然后,使用基本的数值方法对感兴趣的解决方案进行迭代。 重要的提示 被...
  • 39、你的系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢? 40、bash shell 中的 hash 命令有什么作用? 41、哪一个 bash 内置命令能够进行数学运算。 42...
  • 简易入门MFC

    万次阅读 多人点赞 2018-03-26 17:06:31
    1.如何创建一个MFC工程项目创建MFC的过程如下:(visual studio 2012)1>.新建->项目:选择MFC应用程序,名称这里用test(随意,和后面代码那里一致)。然后点确定。2>.出现MFC生...
  • CorelDRAW VBA - 创建GMS全局工程

    千次阅读 2018-01-10 22:01:15
    目的 这篇教程将教会你使用 CorelDRAW 来创建自己的工程(项目)。...注意:高版本 CorelDRAW 创建的GMS工程可能在低版本中无法使用,但是,在低版本 CorelDRAW 中创建的GMS工程可以在高版本的 CorelDRAW 中...
  • eponym 是一组有用的,允许开发人员创建函数和方法别名。 通过简化将嵌套成员方法提升为组合类型,它减轻了选择组合而不是继承的负担。 它还可以用于提供一个函数名称到另一个函数名称的简单映射,以防万一您最...
  • linux内核中创建线程方法

    千次阅读 2018-06-06 07:06:00
    内核创建线程的方法实质上只有一个: kthread_create , kthread_run 是 kthread_create 的罢了;但这个却有一定的意义,正如其名一样: kthread_create :创建线程。线程创建后,不会马上运行,而是需要将 ...
  • C++面试题汇总 (一)

    万次阅读 多人点赞 2019-06-27 08:54:39
    重写:是指子类重新定义父类虚函数的方法。 从实现原理上来说: 重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的)。如,有两个同名...
  • solidworks按钮的制作

    千次阅读 2020-03-08 11:23:05
    本文将介绍一种基本的制作技巧: 新建一个sw文档,点击工具——编辑,进入编辑界面: 输入想要进行的操作的代码,保存。 点击:工具—自定义。点击快捷方式栏下的工具栏中的。 将图中标识红色圆圈...
  • 千次阅读 多人点赞 2020-12-24 09:04:47
    (英语:Macro)是一种批量处理的称谓。 计算机科学里的是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。对于编译语言,展开在...
  • word编程以及VBA

    万次阅读 多人点赞 2018-12-03 19:55:37
    整理自网络   word是什么呢? 是一个批量处理程序命令,正确地运用它可以提高工作效率。微软的office软件允许用户自己编写,叫VBA的脚本来增加其灵活性,进一步扩充它...创建"按钮会打开visual basic编...
  • 在一般的MS Office和Word教材或文章中,对如 何实现的具体操作的描述...便于理解和掌握及其应用方法。针对此情况,本文从的定 =;L、录制、使用和Visual Basic编辑器四个方面对Word 中的应用进行一些探讨。
  • Access学习总结

    万次阅读 2017-03-20 18:00:13
    详细了解access中的 什么是  到底什么是呢? 我们把那些能自动执行某种操作的命令统称为“”。  也是一种操作命令,它和菜单操作命令都是一样的,只是它们对数据库施加作用的时间有所不同,作用...
  • 适配iPhoneX常用的定义及方法

    千次阅读 2018-01-17 14:35:00
    总的来说有两类坑,一个是导航栏+状态栏的高度发生了变化,一个是一些没有实现实现-tableView: viewForHeaderInSection:和-tableView: viewForFooterInSection:等代理方法的UITableView会出错位的问题。 1....
  • [Office] WPS Excel通过添加实现多张表格合并

    万次阅读 多人点赞 2018-03-06 14:20:15
    在我们使用Excel时,...本文主要介绍WPS Excel,讲述两种自动汇总表格数据的方法,通过VB代码实现。一、合并当前文件夹下所有文件表格假设存在如下贵州省九个市州的数据,如下图所示:打开每个表格的格式都一样...
  • 创建一个"Hello World"宏在confluence里创建一个宏元素示例1:创建宏元素自定义"Hello World"宏示例2:设置和使用参数示例3:使用css格式化宏外观源码参考文档 该教程环境参数如下: OS name: "windows 10", version...
  • 使用方法: Manager .h文件 #import @interface  Manager : NSObject singleton_interface ( Manager ); @end Manager .m文件 #...
  • WPF开发教程

    万次阅读 多人点赞 2019-07-02 23:13:20
    通过从 DispatcherObject 派生,您可以创建一个具有 STA 行为的 CLR 对象,并在创建时获得一个指向调度程序的指针。 System.Windows.DependencyObject 生成 WPF 时使用的主要体系结构原理之一是首选属性而不是...
  • SAS_调用已保存的

    千次阅读 2019-05-30 21:07:57
    SAS_调用已保存的宏方法1: 通过%include 和FILENAME 语句调用宏方法2:通过options 选项调用宏注意事项 方法1: 通过%include 和FILENAME 语句调用宏 *用filename 语句声明sas macro 文件所在位置; FILENAME ...
  • 的使用

    千次阅读 2016-06-14 15:02:49
    ABAP中宏的使用不多,基本用于简单的代码复用,在SAP报表开发中可用于Filedcat和Layout的创建。一、的定义与调用 语法:DEFINE NAME. "NAME为的名,自己定义" <STATEMENTS> . "代码段,一般是计算公式或赋值" ...
  • Excel(VBA)类模块的创建与调用

    千次阅读 2020-12-23 22:05:29
    ExcelVBA类模块的创建与调用1 类模块的介绍2 为什么要使用类模块3 如何创建类模块4 如何调用类模块5 代码 1 类模块的介绍 2 为什么要使用类模块 3 如何创建类模块 类模块的新建只需右键选择插入,类模块即可 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 151,904
精华内容 60,761
关键字:

创建宏的方法