【问题标题】:How to select only char variables with PROC SQL in SAS Enterprise Guide?如何在 SAS Enterprise Guide 中使用 PROC SQL 仅选择 char 变量?
【发布时间】:2021-03-04 15:55:55
【问题描述】:

我有以下代码:

PROC SQL INOBS=10 OUTOBS=10;
   CREATE TABLE WORK.FREQUENCY_&ColumnName AS 
   SELECT t1.&ColumnName, 
            (COUNT(t1.&ColumnName)) AS COUNT_of_&ColumnName
      FROM &libname..&tblname t1
      GROUP BY t1.&ColumnName
      ORDER BY COUNT_of_&ColumnName DESC;

此代码有效,但使用此代码我选择所有类型的变量,但我只想选择一个变量是 CHAR。

有没有办法用一个简单的 where 子句来创建这个条件?还是我需要创建一个“如果条件”?如果是,我该如何创建它?

谢谢!

【问题讨论】:

  • 如果您可以使用 PROC FREQ 或 MEANS 代替,您可以使用自动变量 _character_ 来引用所有字符值。如果这是您所有字符值和这些值的计数的摘要,则此方法将起作用。将table语句中的变量替换为_character_gist.github.com/statgeek/e0903d269d4a71316a4e
  • 您也可以通过查询 sashelp.vcolumn 或 dictionary.column 表来选择所有字符变量来生成动态列表。
  • 宏变量COLNAME是如何设置的?当 COLNAME 引用字符变量时想要做什么?您不想创建输出表或创建一个空表吗?你能分享你正在做的事情的更大背景吗?您很可能希望在生成要计数的代码之前进行过滤。

标签: sql sas sas-macro


【解决方案1】:

我现在没有可用的 SAS 安装,但这段代码应该可以工作

data _null_;
  /*
  The relevant columns are probably named differently;
  Check the table sashelp.vcolumn what the values in COLTYPE for character variables actually are
  Don't know exactly out of my head
  */
  set sashelp.vcolumn(where=(MEMNAME eq 'MY_TABLE' and COLTYPE in ('CHAR', 'VARCHAR'))) end=eof; 
  
  attrib COLNAMES format=$1000.;
  retain COLNAMES;
  
  /*
    the following two lines concatenate all extracted column names;
    choose one of the two
  */
  /*concatenate all variable names in a string using || operator*/
  COLNAMES = compbl(COLNAMES) || ', ' || compbl(COLNAME);
  /*or via function catx*/
  colnames=catx(', ',colnames,colname);

  /*define a macro variable to hold all determined columns*/
  if eof then do;
    call symput('M_COLNAMES', compbl(COLNAMES));
  end;
run;

/*print all found columns*/
%put Character columns: &M_COLNAMES.;

然后您可以在您的选择语句中使用宏变量 M_COLNAMES。 这应该让您知道如何做到这一点。

不要犹豫,问更多问题。

【讨论】:

  • 您可能喜欢 CATX colnames=catx(', ',colnames,colname);
  • 我编辑了关于数据 null 评论的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多