Nano Hash - криптовалюты, майнинг, программирование

Множественные счетные запросы в другой таблице

У меня вопрос по SAS. У нас есть таблица crimes, состоящая из преступлений (одно преступление в строке с множеством других сведений, таких как статья уголовного закона или дата).

Date        Article
——————————————-
2019-01-01  146
2019-01-01  122
2019-01-01  123
2019-01-01  123
2019-01-02  160
...

Каждый год мы получаем анкету, в которой указывается, сколько преступлений было совершено по определенным категориям (например, мошенничество, убийства и т. Д.). К сожалению, категории в этой анкете не совпадают с нашими категориями (статьями уголовного закона). Итак, мы должны определить, какие статьи относятся к какой категории опросов. Эта информация хранится в таблице под названием definitions.

В приведенном ниже примере есть две статьи (110, 111), которые можно кратко охарактеризовать как «кража», и три статьи, которые можно кратко охарактеризовать как «нападение»:

Category  Article  Query 
———————————————————————-
Theft     110      select count(*) from crimes where article = 110
Theft     111      select count(*) from crimes where article = 111
Robbery   130      select count(*) from crimes where article = 113
Assault   140      select count(*) from crimes where article = 140
Assault   141      select count(*) from crimes where article = 141
Assault   146      select count(*) from crimes where article = 146     

В нашей базе данных crimes у нас также есть столбец «статья». Теперь наша цель - узнать, сколько существует преступлений.

В результате я хотел бы иметь такую ​​таблицу, которая дает мне количество преступлений по категории (категории, определенные в таблице definitions):

Category    Count
———————————————————
Theft       10,038
Robbery        503
Assault      1,200

Теперь возникает вопрос: как лучше всего получить желаемый результат?

sas
06.02.2020

Ответы:


1

Думаю, можно использовать это proc sql inner join:

proc sql;
   create table want as
   select d.category,count(*) as count
   from crimes c
   inner join definitions d
   on d.Article = c.Article
   group by 
   d.category;
quit;

Это будет работать, если существует связь между article и category в таблице definitions и есть одна строка для одного преступления с определенным article в таблице crimes.

06.02.2020

2

Один из способов сделать это - преобразовать вашу definitions таблицу в настраиваемый формат, который можно прочитать в proc format, а затем суммировать вашу группу, используя настраиваемый формат. Это может значительно упростить работу с кодом в дальнейшем. Чтобы создать собственный и динамический формат, вам потребуются только следующие переменные: start, end, label, category и fmtname.

Если вы забыли, что представляет собой каждая переменная, прочтите этот документ или просто создайте фиктивный формат и прочитайте таблицу вывода с помощью параметра cntlout=.

data fmt;
    length fmtname $32.
           label   $25.
    ;

    set definitions end=eof;

    fmtname = 'articlecat'; /* Format name */
    type    = 'C';          /* Format type. C = Character */
    start   = article;      /* Start lookup value */
    end     = article;      /* End lookup value */
    label   = category;     /* Custom format name to apply to start/end */
    output;

    /* Optional: Give a label for unknown articles using the special HLO variable */
    if(eof) then do;
        HLO = 'O'; /* Special variable representing 'other' */
        call missing(start, end);
        label = 'Unknown';
        output;
    end;

    keep start end fmtname type label hlo;
run;

/* Save the format */
proc format cntlin=fmt;
run;

Теперь вы можете использовать свой формат в любом другом месте программы без необходимости выполнять какие-либо соединения с файлом определения.

proc sql noprint;
    create table want as
        select put(category, $articlecat.) as Category
            , count(*) as Count
        from crimes
        group by calculated Category
    ;
quit;
06.02.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..