Welcome to the LimeSurvey Community Forum

Ask the community, share ideas, and connect with other LimeSurvey users!

Calcul sur les réponses précédentes dans un tableau

  • AudreyEQ
  • AudreyEQ's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
7 years 8 months ago #138353 by AudreyEQ
Bonjour !
Après avoir pas mal cherché sur le forum et dans le manuel, je ne parviens pas à trouver une solution à mon problème (à noter que je débute sur LS et que c'est mon premier questionnaire).

Pour vous exposer un peu là où j'en suis :
J'ai 21 questions au format "tableau" avec une ou plusieurs sous-questions (jusqu'à 11) et 11 réponses possibles (de 0 à 10). Au total j'ai 47 sous-questions.
Je souhaite récupérer la valeur (de 0 à 10) de la réponse pour chaque sous-réponse afin d'afficher la moyenne à la fin du questionnaire et j'ai deux soucis :
  1. Pour ma moyenne j'utilise la fonction {round(sum(P2A_SQ001.NAOK, P2A_SQ002.NAOK, ...)/47, 1)}. Cependant pour certaines de mes sous-questions la réponse doit être "inversée" (si on me réponds "8" je dois le compter comme un "2") et j'ai tenté de faire {round(sum((10-P2A_SQ001.NAOK), P2A_SQ002.NAOK, ...)/47, 1)} en appliquant le "(10- )" aux sous-questions concernées mais sans succès. Le logiciel m'affiche "NAN" à la place du résultat.
  2. Mon autre problème c'est que mes tableau ont des possibilités de réponses allant de 0 à 11 et donc si le répondant coche "0" ça équivaut à "1" dans mon calcul. Soucis que je pourrai résoudre en bidouillant l'expression si elle fonctionnait...

J'espère avoir été suffisamment claire pour que ça soit compréhensible et j'espère que vous pourrez m'aider.
Bonne journée (soirée).
The topic has been locked.
  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
7 years 8 months ago - 7 years 8 months ago #138358 by DenisChenu
Tiens bizarre ce NAN

Mais sinon:
Code:
sum((10-intval(P2A_SQ001.NAOK)...

Peux passer

Ou bien :
Code:
sum(
sum(P2A_SQ002.NAOK,P2A_SQ003.NAOK)/count(P2A_SQ002.NAOK,P2A_SQ003.NAOK),
10*count(P2A_SQ001.NAOK,P2A_SQ004.NAOK),
-1*(sum(P2A_SQ001.NAOK,P2A_SQ004.NAOK)/count(P2A_SQ001.NAOK,P2A_SQ004.NAOK))
)

En tous cas ca reste que des Maths.
Le seul truc bizarre c'est le NAN : c'est quelle version et buildnumber ?

Denis
PS : nouvelle correction
sum(
(if(P2A_SQ002.NAOK<11,sum(P2A_SQ002.NAOK,1),0)
(if(P2A_SQ003.NAOK<11,10-sum(P2A_SQ002.NAOK,1),0)
)/
sum(
(if(P2A_SQ002.NAOK<11,1,0)
(if(P2A_SQ003.NAOK<11,1,0)
)

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
I don't answer to private message.
Last edit: 7 years 8 months ago by DenisChenu. Reason: update with if
The topic has been locked.
  • AudreyEQ
  • AudreyEQ's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
7 years 8 months ago - 7 years 8 months ago #138366 by AudreyEQ
Bonjour et merci pour la réponse !

J'ai essayé avec (10-intval(P2A_SQ001.NAOK)) et je n'ai plus le NAN. Mon résultat n'est pas bon mais il faut que j'applique ma correction pour que le "1" soit bien compté comme un "1" et pas un "2".
EDIT : à quoi correspond le "intval" ?

La deuxième proposition me semble un peu trop fastidieuse pour 47 réponses mais que signifie le ",1" à l'intérieur de la parenthèse de la somme dans "(if(P2A_SQ002.NAOK<11,sum(P2A_SQ002.NAOK,1),0)".
Autre petite question pour satisfaire ma curiosité : que signifie le .NAOK ?

Et pour répondre à la question sur la version, je travaille avec la Version 2.00 + Build 130913
Last edit: 7 years 8 months ago by AudreyEQ.
The topic has been locked.
  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
7 years 8 months ago - 7 years 8 months ago #138370 by DenisChenu
Salut,

Version 2.00 : ceci explique le NAN

Pour le fastidieux :
- tu peux gérer tes codes de sous questions et utiliser self.sq_SN.NAOK et self.sq_SA.NAOK (N pour normal, A pour Anormal), et faire des sumifop plutot quer des sum.
- Tu peux le faire sur LibreOffice calc et copier coller l'équation

Tu as quand même :
- 47 sous questions différentes
- 2 types de sous question (inversée et non)
- Un code qui ne correspond pas au calcul (il suffisait de mettre 1 à 10 et NA pour faciliter les calculs)
Ceci explique le fastidieux ...

Le 2ème test sert à compter : une moyenne se fait sur le nombre de valeurs, comme tu retire certaines valeurs : ce n'est pas sur 47. C'est des maths, pas du LimeSurvey.

Denis

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
I don't answer to private message.
Last edit: 7 years 8 months ago by DenisChenu.
The topic has been locked.
  • AudreyEQ
  • AudreyEQ's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
7 years 8 months ago #138371 by AudreyEQ
Merci Denis !

Je suis toujours dessus...
Au début j'avais fait des questions avec réponses numériques (bloquées de 0 à 10) donc c'était plus simple mais ça ne convient pas à mon commanditaire. Et c'est en passant en mode tableau que les problèmes se sont multipliés.

Par contre j'ai du mal m'exprimer parce que ma moyenne se fait bien sur 47. Je ne retire pas des valeurs, je veux juste leur appliquer une correction.
En fait mes questions sont du type "vous vous sentez..." avec des réponses type "joyeux", "en bonne santé" etc. ("0" = "pas du tout" et "10" = "tout à fait") MAIS dans le lot j'ai des réponses comme "triste" ou "maussade" et pour celle-ci je veux la note soit inversée. En gros si le répondant se sens bien la note augmente et s'il se sent mal : elle diminue. D'où mon histoire d'inverse mais au final j'ai quand même 47 valeurs avec lesquelles je veux faire une moyenne.

Là en fait j'ai plusieurs options :
  • J'arrive à faire ma somme avec les valeurs voulues (inversées et non-inversées) mais avec une échelle de 1 à 11 plutôt que de 0 à 10. Je peux soustraire 47 à ma somme (en considérant qu'à chaque sous-question j'ai une valeur supérieure de 1 à ce que je veux vraiment) avant de faire ma moyenne mais je n'arrive pas à récupérer la valeur de la somme pour le lui appliquer. Le but serait d'avoir qqc du genre ((SOMME)-47)/47
  • J'applique le correctif dans mon expression pour chaque sous-réponse sous la forme "(1- P2S_SQ001)" pour les valeurs à conserver telle qu'elle et "(11-intval(P2S_SQ001))" pour les réponses à inverser. Sauf que le "(1- REPONSE)" ne fonctionne pas.

Je ne connais pas encore assez bien le langage pour arriver à vraiment bidouiller comme je veux :angry:
The topic has been locked.
  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
7 years 8 months ago #138376 by DenisChenu
Salut,

OK je suis pas sur pour le inverse en fait :
10-intval(P2A_SQ001.NAOK) va faire 1 pour 11 et 9 pour 1 : c'est ce que tu veux ?

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
I don't answer to private message.
The topic has been locked.
  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
7 years 8 months ago #138377 by DenisChenu
A propos : intval : force en partie entière , même un caractère.

Denis

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
I don't answer to private message.
The topic has been locked.
  • AudreyEQ
  • AudreyEQ's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
7 years 8 months ago #138386 by AudreyEQ

DenisChenu wrote: Salut,

OK je suis pas sur pour le inverse en fait :
10-intval(P2A_SQ001.NAOK) va faire 1 pour 11 et 9 pour 1 : c'est ce que tu veux ?


C'est bien ce que je veux.

J'ai finalement trouvé une solution. J'ai remplacé mes tableau par des curseurs que j'ai paramétré de 0 à 10 du coup plus de soucis et pour mes valeurs inverses j'ai appliqué l'expression que tu m'as donnée. Encore merci pour le coup de main ! :)
The topic has been locked.
Moderators: Nickko

Lime-years ahead

Online-surveys for every purse and purpose