【问题标题】:Using Compress and Put/Input functions in SAS在 SAS 中使用 Compress 和 Put/Input 函数
【发布时间】:2015-11-23 21:26:24
【问题描述】:

我这里有这两个数据集:

data ONE;    
  input ID LastName $ FirstInit $ 1.;    
  datalines;                         
509182793 Smith C                   
319861601 Williams J                    
345121778 Connor F                  
480863211 King L                    
907636280 Franklin D                    
729082859 Monroe T                  
835688938 Hall K
  ;                 
run;    

data TWO; 
  input ID $ 11. State $ 2.;
  datalines;
334-99-5246 TX
480-86-3211 MD
449-55-9407 VA
345-12-1778 GA
907-63-6280 NY
790-09-9813 WY
319-86-1601 FL
  ;
run;

我有两个问题: 1) 你将如何使用COMPRESS 创建一个新的字符变量“ncv”并将 ncv 的值设置为删除连字符的字符变量 ID 的值?这是我的尝试:

data TWO_NUMERIC;
  set TWO;
  ncv=COMPRESS(TWO, "+-", "d");
run;

2) 如何使用PUT/INPUT 将 ncv 转换为数值以创建数值变量“newncv”

data TWO_NUMERIC;
  set TWO;
  put(TWO,z6.);
run;

从这两个问题开始,我从 DATA 步和 SET 语句开始:

data TWO_NUMERIC;
  set TWO;
run;

我查看了 SAS 9.2 的帮助页面,但在他们的示例代码中使用这两个语句似乎让我感到困惑。

【问题讨论】:

  • 您的数据和 set 语句缺少分号,并且分号需要在数据输入步骤的单独行中。
  • 你说他们让你感到困惑,你能发布你对这些功能的实际尝试吗?
  • 我已经附上了我认为的内容。

标签: sas


【解决方案1】:

好的,我本来想说的是 RTM,但在这种情况下不清楚,至少在我看来不是。

您对压缩的错误是第一个参数应该是变量,在这种情况下是 ID,而不是数据集 TWO。此外,您只需在列表中指定 -,而不是 +,除非您认为变量中也可能有 +。添加修饰符 D,指定将数字添加到删除列表,这与您想要的相反。

与 PUT/INPUT 类似的概念,引用变量并确保使用正确的函数,在这种情况下,输入将其转换为数字。

Data two_numeric;
   set two;

   ncv=COMPRESS(ID, "-");
   ncv_num=input(ncv, 12.);
run;

【讨论】:

    【解决方案2】:

    压缩可以有多种使用方式,一种是上面@Reeza描述的,另一种是使用“k”修饰符,意思是“保持”,如下图,

    data TWO_NUMERIC;
      set TWO;
      ncv_d=COMPRESS(ID," ", "kd"); * kd means keep-digits, your code had TWO which is a dataset name;
      ncv_n=COMPRESS(ID," ", "kn"); * kd means keep-numbers;
    
      /* Input Function is used to convert CHAR to NUM        *
       * the best. format applies the nearest matching format */
      newncv=input(ncv_d,best.); 
    run;  
    

    我发现有助于解释 K 修饰符的链接是 http://www.amadeus.co.uk/sas-training/tips/1/1/11/the-enhanced-compress-function.php

    【讨论】:

    • BEST. 是一种格式。如果您需要通用信息,请使用 12.F12.COMMA12.
    • @Tom-Best。通常会并让 SAS 选择最佳表示法。我也同意使用 12. 或 F12。甚至BEST16。站在最好的一边:)
    • 如果您使用BEST. 作为格式,那么 SAS 将决定使用的最佳显示格式。但是,当您阅读数据时,该决定已经由生成您正在阅读的文本的人做出。但是,如果您在 INFORMAT 中指定 BEST.,那么 SAS 将切换为使用 F. 格式。 F. 格式知道如何读取带小数点和不带小数点的数据以及科学记数法。如果您的输入数据可能包含逗号或美元符号,那么您应该使用COMMA. INFORMAT。
    猜你喜欢
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多