Construye una estadística con pgfplotstable

Construye una estadística con pgfplotstable

Estoy intentando crear algún tipo de estadística sobre una tabla como en el siguiente Código:

\documentclass{standalone}

\usepackage{pgfplotstable}
\usepackage{booktabs, colortbl}
\usetikzlibrary{patterns}
\pgfplotstableset{col sep=semicolon, use comma, fixed, set thousands separator={}, 
    every even row/.style={before row={\rowcolor[gray]{0.9}}}, 
    every head row/.style={before row=\toprule, after row=\midrule},
    every last row/.style={after row=\bottomrule}}

\newcommand{\sumoccurence}[3]{
    % #1=table
    % #2=column
    % #3=value
    \def\colsum{0}
    \pgfplotstableforeachcolumnelement{#2}\of#1\as\cell{
        \ifdim\cell pt=#3 pt
        \pgfmathsetmacro\colsum{\colsum+1}
        \fi
    }
    \colsum
}

\newcommand{\addstatisticcol}[5]{ %
    % #1=table name to count
    % #2=column name to count
    % #3=table to add column
    % #4=column mith marks
    % #5=name of new column
    % Sums for each column
    %Should read from table #1 the column #2 and count for each mark in table #3 in column #4 and add a new column #5 
    \pgfplotstablecreatecol[
    create col/assign/.code={%
        \def\entry{}
        %\xdef\entry{
        %\xdef\entry{\sumoccurence{#1}{#2}{\thisrowno{#2}}
        %\xdef\entry{\sumoccurence{#1}{#2}{2.0}}
        \xdef\entry{\thisrow{#4}}
        \pgfkeyslet{/pgfplots/table/create col/next content}\entry
    }
    ]{#5}#3
}
%

\begin{document}
    \pgfplotstableread{
        ID; Mark
        1010121; 1.0
        1010122; 1.0
        1010123; 5.0
        1010124; 5.0
        1010125; 3.0
        1010126; 4.0
        1010127; 2.7
    }\Marks

    \pgfplotstableread{
        Marks; Count
        1.0; 2
        1.3; 0
        1.7; 0
        2.0; 0
        2.3; 0
        2.7; 1
        3.0; 1
        3.3; 0
        3.7; 0
        4.0; 1
        4.7; 0
        5.0; 2
    }\Statistic

    %Original Table
    \pgfplotstabletypeset[columns={ID, Mark}, 
    columns/Mark/.style={numeric type, fixed zerofill, precision=1}]\Marks

%   \hspace{1cm}

    %Statistic how it should be
    \pgfplotstabletypeset[
    columns={Marks, Count}, 
    columns/Marks/.style={numeric type, fixed zerofill, precision=1}]\Statistic

    %Creating a new Table for the statistic
    \pgfplotstablenew[create on use/Marks/.style={create col/set list={1.0,1.3,1.7,2.0,2.3,2.7,3.0,3.3,3.7,4.0,4.7,5.0}}, columns={Marks},]{12}\loadedtable

    %Adding an automatically calculated column for count of each mark
    \addstatisticcol{\Marks}{Mark}{\loadedtable}{Marks}{Count}

    %Current result with just a copy of the first column
    \pgfplotstabletypeset[
    columns={Marks, Count}, 
    columns/Marks/.style={numeric type, fixed zerofill, precision=1}]\loadedtable
\end{document}

Pude crear un comando que calcula todas las apariciones (\sumoccurences) de un valor determinado. Pero cuando intento usar este comando en un comando nuevo como \addstatisticcol no funciona. Recibo muchos errores como

Secuencia de control Indefinido. ...Nota}{Nota}{\loadedtable}{Nota}{Anzahl}

y, como

El argumento de \pgfutil@in@@ tiene un }. ...Nota}{Nota}{\loadedtable}{Nota}{Anzahl}

Aquí está la salida actual:ingrese la descripción de la imagen aquí

Ojalá alguien pueda darme una pista.

Respuesta1

Fue sólo un pequeño error. Necesitaba sacar \sumoccurences de \xdef y usar la macro allí en su lugar.

\newcommand{\sumoccurence}[3]{
  % #1=table
  % #2=column
  % #3=value
  \def\colsum{0}
  \pgfplotstableforeachcolumnelement{#2}\of#1\as\cell{
      \ifdim\cell pt=#3 pt
      \pgfmathsetmacro\colsum{\colsum+1}
      \fi
  }
  %\colsum %removed this
}

\newcommand{\addstatisticcol}[5]{ %
    % #1=table name to count
    % #2=column name to count
    % #3=table to add column
    % #4=column mith marks
    % #5=name of new column
    % Sums for each column
    %Should read from table #1 the column #2 and count for each mark in table #3 in column #4 and add a new column #5 
    \pgfplotstablecreatecol[
    create col/assign/.code={%
        \def\entry{}
        \sumoccurence{#1}{#2}{\thisrow{#4}} %call it separately 
        \xdef\entry{\colsum} %use the created macro here
        \pgfkeyslet{/pgfplots/table/create col/next content}\entry
    }
    ]{#5}#3
}
%

información relacionada